| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > программа "умирает" |
| Автор: DEER 20.3.2006, 17:02 | ||||
| привет всем http://forum.vingrad.ru/index.php?showtopic=87856 я спрашивал , про закачку картинок, всё понял, написал программку, суть её в следующем. она заходит на страницу, ищет на ней список ссылок, этот список в массив $list_url{$deskription}=$url. далее идёт цикл, просматриваются все элементы массива(хеша), печатается описание к ссылке; для каждого элемента вызывается следующий алоритм: - получаем страницу по ссылке; - там ищем ещё один список со ссылками; - заходим по каждой ссылке, берём от туда картинку - печатаем новый адрес картинки в конце концов должно получится примерно следующее
вроде всё работает. но на практике, ссылок оказалось очень много, и ещё я поставил перед каждым запросом sleep(2), чтобы не нагружала сервак, откуда качаю. Время работы программы должно быть примерно часа 4(это я оценив, скока он скачал за 10 минут прикинул). Через час работы программы, получается следующий список
т.е. программа, не заходит в процедуру получения картинок, а просто печатает хеш до конца и выключается. Так вот вопрос: из за чего это может быть? проблема в серваке? может там стоит какая нить константа, показывающая сколько максимально по впемени может работать скрипт? или проблемма в программе? или может я сильно часто делаю запросы на страницу? Щас ещё одна мысль пришла... а может это админ того сайта, откуда я картинки беру отрубил моё соединение? |
| Автор: nitr 20.3.2006, 17:20 |
| Покажи немного кода |
| Автор: DEER 20.3.2006, 17:38 | ||
ну например вот:
сначала вызывается get_child_categories, потм для каждого элемента, еще одна функция get_list, почти аналогичная get_child_categories (только регулярное выражение другое), потом, вызывается фуекция get_pict, для того что нашла get_list. Добавлено @ 17:41 ещё. код рабочий, потому что перед тем как умереть, он успевает собрать около 900 картинок |
| Автор: nitr 20.3.2006, 17:51 |
| Первое на что могу подумать это ПЛОХОЙ КОННЕКТ Добавлено @ 17:54 Ещё... при использовании прокси НЕОБХОДИМА такая процедура! (проверка на "быстрый" коннект или доступность). Используй стандартные сокеты, либо тот же LWP, возьми почитай про ошибки типа 500, 200 OK и т.д. |
| Автор: DEER 20.3.2006, 18:01 |
| а что есть $ua->timeout(5); ? это он будет 5 секунд ждать до ответа, а потом если его нет, то не ждёт больше? Добавлено @ 18:02 спасибо, буду копать |
| Автор: nitr 20.3.2006, 18:44 | ||
=) Это значит что ждать всего 5 секунд и дисконнект
|
| Автор: sharq 21.3.2006, 12:44 | ||
DEER, sleep вообще убери и попробуй вести лог:
И отследить, где ошибка! Попробуй fork для ускорения закачки! Я здесь приводил свой пример закачки страницы через прокси, можешь поискать! |