samlab
Гость
|
|
« : 26-02-2010 20:19 » |
|
Используя треды в парсинге, делаю так threads->new(\&pars) for 1 .. 10;
$_->join for threads->list;
sub main { # тут запрос {
Проблема в том, что запрос осуществляется в 10 потоков одновременно. Т.е., скрипт выдачи сервера считает, что сайт банально ддосят... Есть ли какой нибудь способ реализации очереди??? Заранее спасибо откликнувшимся...
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #1 : 26-02-2010 21:09 » |
|
samlab, очередь - это уже последовательная обработка. Короче, меняй логику: один поток для запросов и N потоков для обработки. С другой стороны, если обработка занимает десятые доли секунды и меньше, то уже не имеет смысла использовать потоки.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
samlab
Гость
|
|
« Ответ #2 : 26-02-2010 21:23 » |
|
samlab, очередь - это уже последовательная обработка. Короче, меняй логику: один поток для запросов и N потоков для обработки. С другой стороны, если обработка занимает десятые доли секунды и меньше, то уже не имеет смысла использовать потоки. Обработка действительно занимает доли секунд, как же тогда быть?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #3 : 26-02-2010 21:29 » |
|
Не использовать потоки. Сделай все последовательно в одном цикле.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
samlab
Гость
|
|
« Ответ #4 : 26-02-2010 21:32 » |
|
Тогда, весь процесс будет слишком долгим... А что вы можете сказать про Thread::Queue ?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #5 : 26-02-2010 21:45 » |
|
Или тебя забанят за DoS...
У тебя главная проблема в том, что ты не должен делать много одновременных запросов на сервер. В идеале - один одновременный запрос. Т.е. экономить время можно только на обработке данных: класть задания в очередь, а 1-2 потока будут забирать их и обрабатывать (не забудь про синхронизацию!). Если время запроса, скажем, секунда, а время обработки - 0.1 секунды, то такая схема даст всего лишь 1/11 экономии.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
samlab
Гость
|
|
« Ответ #6 : 27-02-2010 11:40 » |
|
Понятно, спасибо Добавлено через 8 часов, 39 минут и 46 секунд: Вот, хотел еще узнать, каким образом очищать буфер в перле, чтобы данные, пришедшие с сервера его не забивали?
|
|
« Последнее редактирование: 27-02-2010 20:19 от samlab »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #7 : 28-02-2010 09:07 » |
|
Какой буфер?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
samlab
Гость
|
|
« Ответ #8 : 01-03-2010 10:09 » |
|
Когда данные выводятся на печать, а скрипт запущен в кроне
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #9 : 01-03-2010 14:17 » |
|
samlab, я ничего не понимаю из того, что ты говоришь. Может мне надо выспаться, но все же попрошу изъясняться понятнее.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
samlab
Гость
|
|
« Ответ #10 : 01-03-2010 19:04 » |
|
Я вот это имел ввиду, прошу прощения за свою корявую речь http://computerlibrary.info/view/article133/В частности, Perl имеет неприятное свойство накапливать данные в буфере, но нам нужно будет их немедленно сбрасывать, для чего и применяется указанный метод.Или это имеет место только при работе с сокетами? Парс делаю с помощью LWP, говорят, что так намного медленнее, чем с помощью сокетов... проясните ситуацию, пож...
|
|
« Последнее редактирование: 01-03-2010 19:07 от samlab »
|
Записан
|
|
|
|
McZim
|
|
« Ответ #11 : 01-03-2010 19:28 » |
|
Когда данные выводятся на печать, а скрипт запущен в кроне а причем тут печать и буфер в приведенной статье?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
samlab
Гость
|
|
« Ответ #12 : 01-03-2010 19:38 » |
|
Притом, что я имел ввиду этот буфер, а с печатью, наверное, просто некорректно выразился
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #13 : 01-03-2010 19:38 » |
|
samlab, приведенная ссылка ясности не добавила. Разбираться в килобайтах непонятного текста? Зачем?! У нас же есть Хрустальный шар! Точнее бы... Если ты про буферизацию вывода, то это лечится так: Всевозможные буферы на ввод не влияют. Фигня насчет медленнее. Для современных PC процессорное время почти ничего не стоит, а вот сети и загрузка сервера — они обычно вносят наибольшую задержку.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
samlab
Гость
|
|
« Ответ #14 : 04-03-2010 19:30 » |
|
Спасибо, все понял...
|
|
|
Записан
|
|
|
|
nagual
Новенький
Offline
|
|
« Ответ #15 : 09-07-2010 10:16 » |
|
Для того чтоб серв не думал что его ддосят нужно одить с кучи ипов через прокси ... или прикинуться гуглеботом .... Кстати у тредов утечка памяти ... как с ней бороться кто то знает ?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #16 : 09-07-2010 12:10 » |
|
nagual, откуда такая информация про утечку? Просто так - для красного словца?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
samlab
Гость
|
|
« Ответ #17 : 12-07-2010 13:36 » |
|
|
|
|
Записан
|
|
|
|
|