[Moscow.pm] LWP::Parallel
Dmitriy T.
403rus на gmail.com
Вс Май 11 01:37:38 PDT 2008
Позволю предположить что проблемы могут быть если создатели
вдохновлялись обычной LWP . Потому что LWP это пожалуй наиболее
отвратно сделанная библиотека среди популярных из тех что я видел.
Другое дело что для простых задач эти проблемы могут быть
несущественные(что вобщем и есть с LWP - тупо скачать страницу с помощью
неё можно без проблем, что вобщем и надо 99,99% пользователей, косяк с
хедерами который никто не мог исправить годами(ожет уже исправили - не
знаю), неправильным POST'ом в определённых ситуациях их не волнуют, так
как они с этим просто не сталкиваются).
Второе: посмотрел по диагонали исходник - если я правильно понял то
сделан LWP::Parallel на селекте, что вобщем нормально если количество
одновременно открытых коннектов не более 1000 (цифра по памяти - может
плюс минус километр оказаться, да и зависит например от операционки).
Если нужно больше коннектов, то надо точно смотреть в сторону C/C++ с
epoll/kqueue. Правда 1000 коннектов (да даже 100-200 если качать с
тормозных сайтов) на хорошем канале я думаю сожрут 100% CPU(одного ядра
если их много) если в LWP::Parallel по этому поводу не заморачивались...
Ну или смотреть как тут советовали на всякие перловые nonblocking
костыли - я в своё время пересмотрел парочку и плюнул, так как оказалось
проще на c++ написать чем бороться с утечками и граблями в чужих
библиотеках. Но может для твоих задач их вполне хватит и грабли пройдут
мимо. К тому же с тех пор их появилось много - может есть уже нормальное
что-нибудь...
Вобщем посмотри при работе как у тебя жрётся CPU и хватает ли канала.
Если CPU жрётся меньше 15-20% и канала достаточно - то значит чего-то
криво в LWP::Parallel. Если в никсах то можешь ещё извне посмотреть где
затык - профайлером или трейсером каким...
Михаил Монашёв wrote:
> Здравствуйте, Дмитрий.
>
> А кроме резолвера в нём какие ещё могут быть проблемы? Потому как в
> моём случае хостов всего пяток.
>
> DT> Насколько я помню LWP(который обычный - с Parallel не работал, но думаю
> DT> там так же) резолвит хосты без учёта таймаута, отсюда такое и
> DT> получается. К тому же если в LWP::Parallel синхронный резолвер и
> DT> нагрузки очень большие, то предлагаю искать сразу другой инструментарий
> DT> (возможно лучше вообще на C/C++).
>
> DT> Ещё помню как-то когда писал web-парсер(не помню уже на чём) сдуру
> DT> выставил обрабатывать бесконечное число редиректов - а там некоторые
> DT> страницы редиректили сами на себя, получилось весело...
>
>
>>> LWP::Parallel рабочий модуль?
>>>
>>> Таймаут задаю секунду. Запихиваю ему 1000 урлов. Через секунду, да и
>>> через минуту тоже, он всё ещё чего-то там ждёт, и не все урлы
>>> обработаны.
>>>
>
> --
>
> С уважением,
> Михаил Монашёв, SoftSearch.ru
> mailto:postmaster на softsearch.ru
> ICQ# 166233339
> http://michael.mindmix.ru/
> Без бэкапа по жизни.
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> http://mail.pm.org/mailman/listinfo/moscow-pm
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: http://mail.pm.org/pipermail/moscow-pm/attachments/20080511/cd671b73/attachment.html
Подробная информация о списке рассылки Moscow-pm