из POE очень торчат уши его внутреннего устройства, и ушей много (HEAP, WHEEL). В twisted все как-то лаконичнее, и более структурировано. Уши торчат только из conntectTCP/listenTCP -- там требуются обязательные протоколы/фабрики. (я как правилл использовал стандартные HTTP/SMTP "из коробки")
Вот что точно можно в POE и нельзя в твистед (по крайней мере без сторонних довесков) -- это несколько реакторов в одном приложении (в разных тредах). POE такое умеет насколько я помню.
Что у меня не получилось с POE в свое время -- это "убить" event loop изнутри (это был некий демон управляемый по xmlrpc, я пытался сделать в нем вызов "shutdown")
Возвращаясь к исходному посту: у меня есть полурегулярная задача - скачать 2.5 миллиона homepages с сайтов (для черного квадрата). Из них процентов 10 дохлых, еще какое-то количество меня зобанило.
POE на этом регулярно падает (естественно, я не 2.5 миллиона коннектов открываю, а штук 500-700), скрипт все рос в смысле правильных очередей, рестартов и все такое, достало неимоверно.
AnyEvent снял головную боль с падениями полностью (хотя код для рестартов я оставил, естественно....)
Как интересно. Я тут как раз небольшой проектец на POE наштрямкал, около 5 тыщ строк. Правда, всю HTTP часть вынес нафиг в отдельный LWP-сервер, общаюсь с ним сообщениями, поскольку не смог придумать как на POE сделать HTTPS через прокси.
Я мельком проглядел, не увидел. Можно там передать сообщение для конкретной сессии? Второй вопрос, будет работать с форкнутыми процессами?
Я, кстати, писал спайдера на LWP. Форкал процессов пачку, да сообщения им давал, получал. Если б память текла, можно было б просто грохать через эн запросов процесс, но она не текла практически. В общем, работало шустро, 100 мбит скушивалось на раз и процессора ещё много оставалось.
AnyEvent::HTTP да, круто, я там даже в благодарностях отмечен)
Только вот на продакшене он не очень почему-то. Может спятисотить, или сожрать несколько сотен метров памяти на один запрос, или ещё что странное приключится, с кодировками например. Под мод_перлом всё. В версии 1.40 внезапно оказалися сломан парсинг кук... Нет шелковистости.
У меня, в моей конкретной задаче (см. выше) оказалось куда стабильнее POE. Посмотрим.
LWP::ParallelUA не вариант совсем, если он конечно в последние годы не развился неимоверно.
Comments
После python+twisted POE может вызывать только недоумение.
После python+twisted POE может вызывать только недоумение.
Да казалось бы семантика примерно та же, а что буковки други
Да казалось бы семантика примерно та же, а что буковки другие - так какая разница?
из POE очень торчат уши его внутреннего устройства, и ушей м
из POE очень торчат уши его внутреннего устройства, и ушей много (HEAP, WHEEL). В twisted все как-то лаконичнее, и более структурировано. Уши торчат только из conntectTCP/listenTCP -- там требуются обязательные протоколы/фабрики. (я как правилл использовал стандартные HTTP/SMTP "из коробки")
Вот что точно можно в POE и нельзя в твистед (по крайней мере без сторонних довесков) -- это несколько реакторов в одном приложении (в разных тредах). POE такое умеет насколько я помню.
Что у меня не получилось с POE в свое время -- это "убить" event loop изнутри (это был некий демон управляемый по xmlrpc, я пытался сделать в нем вызов "shutdown")
Уши да, торчат. Правда несильно мешают. Возвращаясь к исход
Уши да, торчат. Правда несильно мешают.
Возвращаясь к исходному посту: у меня есть полурегулярная задача - скачать 2.5 миллиона homepages с сайтов (для черного квадрата). Из них процентов 10 дохлых, еще какое-то количество меня зобанило.
POE на этом регулярно падает (естественно, я не 2.5 миллиона коннектов открываю, а штук 500-700), скрипт все рос в смысле правильных очередей, рестартов и все такое, достало неимоверно.
AnyEvent снял головную боль с падениями полностью (хотя код для рестартов я оставил, естественно....)
Как интересно. Я тут как раз
Как интересно. Я тут как раз небольшой проектец на POE наштрямкал, около 5 тыщ строк. Правда, всю HTTP часть вынес нафиг в отдельный LWP-сервер, общаюсь с ним сообщениями, поскольку не смог придумать как на POE сделать HTTPS через прокси.
Я промазал с выбором?
Ну если не понравится, то
Ну если не понравится, то перехать довольно просто, идеология практически та же.
Я мельком проглядел, не
Я мельком проглядел, не увидел. Можно там передать сообщение для конкретной сессии? Второй вопрос, будет работать с форкнутыми процессами?
Я, кстати, писал спайдера на LWP. Форкал процессов пачку, да сообщения им давал, получал. Если б память текла, можно было б просто грохать через эн запросов процесс, но она не текла практически. В общем, работало шустро, 100 мбит скушивалось на раз и процессора ещё много оставалось.
Всякие сессионные данные
Всякие сессионные данные (например, идентификатор для очереди сообщений) там на конструировании closure передаются.
А спайдеры бывают разные, у меня 800 потоков - нормальное такое число, форкать 800 процессов как-то скучно.
Попробовал 8000 потоков (для
Попробовал 8000 потоков (для "дохлых сайтов", которые в прошлые разы не ответили) - полет нормальный.
> А спайдеры бывают разные, у
> А спайдеры бывают разные, у меня 800 потоков - нормальное такое число, форкать 800 процессов как-то скучно.
Я 2000 форкал, и ничего ;)
AnyEvent::HTTP да, круто, я там даже в благодарностях отмече
AnyEvent::HTTP да, круто, я там даже в благодарностях отмечен)
Только вот на продакшене он не очень почему-то. Может спятисотить, или сожрать несколько сотен метров памяти на один запрос, или ещё что странное приключится, с кодировками например. Под мод_перлом всё. В версии 1.40 внезапно оказалися сломан парсинг кук... Нет шелковистости.
Увы, LWP тяжел и тормознут, но я вернулся к нему.
У меня, в моей конкретной задаче (см. выше) оказалось куда с
У меня, в моей конкретной задаче (см. выше) оказалось куда стабильнее POE. Посмотрим.
LWP::ParallelUA не вариант совсем, если он конечно в последние годы не развился неимоверно.
или сожрать несколько сотен
или сожрать несколько сотен метров памяти на один запрос
Это завистит не от AnyEvent, а от того, что кто-то пытается залить /dev/random.
Это, как раз лечится (можно,
Это, как раз лечится (можно, например, в on_body буферизовать в файл)
Post new comment