Skip to Content

Perl event loop

POE - suxx, AnyEvent - rulezzz.

Я гарантирую это! Хотя семантика у AnyEvent немножко странноватая, да.

Хотя это относится почти исключительно к POE::Component::Client::HTTP и к AnyEvent::HTTP, соответственно.

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

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <s> <i> <b> <blockquote>
  • Lines and paragraphs break automatically.

More information about formatting options

By submitting this form, you accept the Mollom privacy policy.


.