[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