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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Распределение потоков  (Прочитано 13343 раз)
0 Пользователей и 1 Гость смотрят эту тему.
xzfrqtn7
Интересующийся

ru
Offline Offline

« : 08-06-2010 22:47 » 

Код:
#!/usr/bin/perl -w

$| = 1;

use LWP::UserAgent;
use LWP::ConnCache;

use threads ('yield',
'stack_size' => 8*4096,
'exit' => 'threads_only',
'stringify');

my $url = 'http://somesite.ru/';

my $threads = 5;

threads->new(\&main) for 1 .. $threads;

$_->join for threads->list;

sub main

{

$i = 1;

while ($i<3) {

my $ua = LWP::UserAgent->new;

$ua->conn_cache(LWP::ConnCache->new());
$ua->agent('Mozillo 9.0 Presto);
$ua->default_headers->push_header('Accept' => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
$ua->default_headers->push_header('Accept-Language' => "ru,en-us;q=0.7,en;q=0.3");
$ua->default_headers->push_header('Accept-Charset' => "windows-1251,utf-8;q=0.7,*;q=0.7");
$ua->default_headers->push_header('Referer' =>"http://google.ru/search/");

$response = $ua->get($url);
 
print $response;

sleep (15);

redo;

++$i;
}
}

Привествую всех. В коде, приведенном выше, 5 потоков запрашивают страничку одновременно, потом обрабатывают ее содержимое... Можно ли как-то настроить их, чтобы, к примеру 3 из них запрашивали страницу, а другие в это время обрабатывали результат...  Слышал, что для многопоточности больше всего подходит событийная машина POE, в ней можно настроить интервал между потоками, чтобы  парсинг был более безопасен с точки зрения палевности. Правда ли это?
Спасибо за любую помощь заранее...
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #1 : 09-06-2010 03:29 » 

С год назад ты что-то подобное уже спрашивал.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
xzfrqtn7
Интересующийся

ru
Offline Offline

« Ответ #2 : 09-06-2010 18:14 » 

Разве?
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #3 : 09-06-2010 18:18 » 

Я ошибся: не ты и не год назад, а всего 4 месяца.

Посмотри вот эту тему: https://forum.shelek.ru/index.php/topic,23563.0.html
Если она тебя не удовлетворит, то опиши свою задачу детальнее.
« Последнее редактирование: 09-06-2010 18:27 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
xzfrqtn7
Интересующийся

ru
Offline Offline

« Ответ #4 : 10-06-2010 13:29 » 

Не то, чтобы тема меня не удовлетворила ( как скажем, может удовлетворить парня его девушка или не его, но все же девушка Краснею Краснею Краснею), но все равно много неясного...
Для начала, чтобы вас не нагружать своей чепухой, хотел бы спросить, можно ли где нибудь почитать про POE на русском языке с понятными примерами, или с вашими комментариями вкратце... А то везде, где я гуглил, про событийную машину пишут, что она очень сложна и подсилу с ней разобраться только программисту со стажем, а не любителю... С тредами, как я понял, кроме ддоса и отъедания памяти с последующим Out of Memory ее утечкой ничего не получить путного... У меня памяти 4 Гб, а 100 тредов уже завершаются с ошибкой нехватки памяти... А черт его знает...
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #5 : 11-06-2010 07:06 » 

Что ты имеешь в виду под POE?

Описание задачи так и не вижу.

Утечки памяти в Perl - это фантастика. Быстрее у тебя используются некорректные структуры, ссылающиеся по кольцу и сборщик мусора не может их удалить. Либо еще какой дефект проектирования.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
xzfrqtn7
Интересующийся

ru
Offline Offline

« Ответ #6 : 11-06-2010 17:08 » 

POE - portable multitasking and networking framework for Perl.

   А по-русски, платформонезависимый фреймворк для создания многозадачных
   и сетевых приложений на Perl.
   POE позволяет достаточно просто и быстро создавать многозадачные
   приложения, особо не задумываясь об управлении процессами и другими
   приятными вещами, с которыми приходится сталкиваться при желании
   написать многозадачное приложение. Всю эту нагрузку на себя берет POE,
   мы лишь описываем, что мы хотим делать. В большинстве случаев все
   приложение выполняется одним процессом, но при необходимости, POE умеет
   порождать дочерние процессы и общаться с ними.

Описание задачи - послать запрос на сервер, получить список прокси, отправить запрос на другой сервер с целью проверки состояния этого прокси и получить результат, т.е. задача довольно банальна - прокси граббер и прокси чекер. Естественно, хочется многопоточности, ибо забрать за раз весь список прокси нельзя...
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #7 : 16-06-2010 08:00 » 

Тогда расход памяти можно списать на ссылки во внутренних структурах POE. Полагаю, что этого не произойдет, если корректно освобождать ресурсы, а не полагаться целиком на сборщик мусора. Например, присваивать ссылкам на уже ненужные структуры undef.

Код:
my $ref = Some::Thing->new();

$ref->close(); // штатные механизмы завершения работы
$ref = undef; // дополнительные принудительные меры

По первичному вопросу: подумай, что занимает больше времени - запрос или обработка данных? Если обработка быстра и однотипна, то нет смысла выделять ее в отдельный поток. Если она сложна, многоступенчата, эти ступеньки можно параллелить и они не вызывают частых взаимных блокировок, то тогда можно и многопоточность применять. Главное - правильно спроектировать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
xzfrqtn7
Интересующийся

ru
Offline Offline

« Ответ #8 : 17-06-2010 23:14 » new

Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines