Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Очередь в работе с тредами  (Прочитано 20758 раз)
0 Пользователей и 9 Гостей смотрят эту тему.
samlab
Гость
« : 26-02-2010 20:19 » new

Используя треды в парсинге, делаю так

Код:
threads->new(\&pars) for 1 .. 10;

$_->join for threads->list;

sub main
{
# тут запрос
{

Проблема в том, что запрос осуществляется в 10 потоков одновременно. Т.е., скрипт выдачи сервера считает, что сайт банально ддосят...
Есть ли какой нибудь способ реализации очереди??? Заранее спасибо откликнувшимся...
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 26-02-2010 21:09 » 

samlab, очередь - это уже последовательная обработка. Улыбаюсь

Короче, меняй логику: один поток для запросов и N потоков для обработки. С другой стороны, если обработка занимает десятые доли секунды и меньше, то уже не имеет смысла использовать потоки.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #2 : 26-02-2010 21:23 » 

samlab, очередь - это уже последовательная обработка. Улыбаюсь

Короче, меняй логику: один поток для запросов и N потоков для обработки. С другой стороны, если обработка занимает десятые доли секунды и меньше, то уже не имеет смысла использовать потоки.

Обработка действительно занимает доли секунд, как же тогда быть?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 26-02-2010 21:29 » 

Не использовать потоки. Сделай все последовательно в одном цикле.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #4 : 26-02-2010 21:32 » 

Тогда, весь процесс будет слишком долгим... А что вы можете сказать про Thread::Queue ?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #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 Offline
Пол: Мужской

WWW
« Ответ #7 : 28-02-2010 09:07 » 

Какой буфер?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #8 : 01-03-2010 10:09 » 

Когда данные выводятся на печать, а скрипт запущен в кроне Улыбаюсь
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #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
Модератор

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #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 Offline
Пол: Мужской

WWW
« Ответ #13 : 01-03-2010 19:38 » 

samlab, приведенная ссылка ясности не добавила.
Разбираться в килобайтах непонятного текста? Зачем?! У нас же есть Хрустальный шар! Точнее бы... Ага

Если ты про буферизацию вывода, то это лечится так:

Код:
$| = 1;

Всевозможные буферы на ввод не влияют.

Фигня насчет медленнее. Для современных PC процессорное время почти ничего не стоит, а вот сети и загрузка сервера — они обычно вносят наибольшую задержку.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #14 : 04-03-2010 19:30 » 

 Улыбаюсь Спасибо, все понял...
Записан
nagual
Новенький

ua
Offline Offline

« Ответ #15 : 09-07-2010 10:16 » 

Для того чтоб серв не думал что его ддосят нужно одить с кучи ипов через прокси ... или прикинуться гуглеботом ....
Кстати у тредов утечка памяти ... как с ней бороться кто то знает ?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 09-07-2010 12:10 » 

nagual, откуда такая информация про утечку? Просто так - для красного словца?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
samlab
Гость
« Ответ #17 : 12-07-2010 13:36 » 

 Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines