Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по POE 
:(
    Опции темы
DooZ
Дата 28.11.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



вопрос
есть пример:
Код

#!/usr/bin/perl

use warnings;
use HTTP::Request::Common qw(GET POST);
use POE qw(Component::Client::HTTP);

my @url_list = (
    "http://poe.perl.org/misc/test.html",
    "http://poe.perl.org/?POE_Cookbook/Web_Client"
);

POE::Component::Client::HTTP->spawn( Alias => 'ua' );

sub got_response {
    my ( $heap, $request_packet, $response_packet ) = @_[ HEAP, ARG0, ARG1 ];

    my $http_request  = $request_packet->[0];
    my $http_response = $response_packet->[0];

    my $response_string = $http_response->as_string();
    $response_string =~ s/^/| /mg;
    print ",", '-' x 78, "\n";
    print $response_string;
    print "`", '-' x 78, "\n";
}

sub _start {
    my $kernel = $_[KERNEL];

    foreach my $url (@url_list) {
        $kernel->post( "ua" => "request", "got_response", GET $url);
    }
}

POE::Session->create(
    package_states => [ main => [ "_start", "got_response" ] ]
);

$poe_kernel->run();


все работает, все ок

но если списко урлов будет скажем 10к и более скрипт ОЧЕНЬ-ОЧЕНЬ долго думает (функция _start думает)
после чего вылетает с ошибкой типа:
Can't locate Net/DNS/RR/A.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.6/i386-linux-thread-multi /usr/lib/perl5/5.8.6 .) at (eval 64) line 3.

что за бредятина?

ставлю допустим 500 ссылок, все ок работает (подумаем чуток и работает)

я понимаю, что он думает пока создает очередь запросов, но почему валится при большом кол-ве ссылок?

есть идеи как сделать рабочим при большом кол-ве ссылок, может как-то дозированно выдавать ссылки (в рамках одного запуска)

заранее сенькс
PM MAIL   Вверх
DooZ
Дата 29.11.2006, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



подозреваю что нужно как-то работать с $kernel->yield( $event, @event_args );
НО тогда не могу понять как перехватывать my ( $heap, $request_packet, $response_packet ) = @_[ HEAP, ARG0, ARG1 ];
вот эти два аргумента ARG0, ARG1

$_[ARG0] уже не пашет
$_[0] тоже не пашет

есть идеи?
PM MAIL   Вверх
DooZ
Дата 20.12.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



неужели никто не работал с POE ?
PM MAIL   Вверх
Ramirez
Дата 20.12.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



Похоже так. Я вот тут тоже задавал вопрос - и тишина smile Доков на русском тоже особенно нет...
PM ICQ   Вверх
nitr
Дата 20.12.2006, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Цитата(DooZ @  28.11.2006,  19:02 Найти цитируемый пост)
Can't locate Net/DNS/RR/A.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.6/i386-linux-thread-multi /usr/lib/perl5/5.8.6 .) at (eval 64) line 3.что за бредятина?


а почему бредятина? Что говорит? smile Да верно, нет модуля такого-то такого-то smile
а конкретно :
Цитата

package Net::DNS::RR::A;
#
# $Id: A.pm 546 2005-12-16 15:23:03Z olaf $


К POE нет вопросов smile При установке твоего POE::Component::Client::HTTP данный пакетик ставится, но если ручками ставили модули, то могли и забыть. Попробуй обновить модуль... а по мне так просто определённая ссылка попадается smile, вот может и валится, хотя такого не встречал. 

З.Ы.: Проверил твой код с 1211 ссылками работает smile

Уточни - задача твоего скрипта?

Добавлено @ 23:04 
Может подскажу smile


--------------------
PM   Вверх
DooZ
Дата 22.12.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



Цитата(nitr @ 20.12.2006,  23:03)
Цитата(DooZ @  28.11.2006,  19:02 Найти цитируемый пост)
Can't locate Net/DNS/RR/A.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.6/i386-linux-thread-multi /usr/lib/perl5/5.8.6 .) at (eval 64) line 3.что за бредятина?


а почему бредятина? Что говорит? smile Да верно, нет модуля такого-то такого-то smile
а конкретно :
Цитата

package Net::DNS::RR::A;
#
# $Id: A.pm 546 2005-12-16 15:23:03Z olaf $


К POE нет вопросов smile При установке твоего POE::Component::Client::HTTP данный пакетик ставится, но если ручками ставили модули, то могли и забыть. Попробуй обновить модуль... а по мне так просто определённая ссылка попадается smile, вот может и валится, хотя такого не встречал. 

З.Ы.: Проверил твой код с 1211 ссылками работает smile

Уточни - задача твоего скрипта?

Добавлено @ 23:04 
Может подскажу smile

ты попробуй поставить например 20.000 ссылок или поболее
валится или нет?
на 1000 ссылках быстро обработал (загнал к себе в память?)
PM MAIL   Вверх
nitr
Дата 23.12.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Цитата(DooZ @  22.12.2006,  11:22 Найти цитируемый пост)
ы попробуй поставить например 20.000 ссылок или поболеевалится или нет?на 1000 ссылках быстро обработал (загнал к себе в память?)

Не валится (13778ссылок), но работает небыстро smile я не могу выбрать те ссылки, с которыми коннект замечательный =)
Выложи в инете список с большим количеством ссылок smile 


--------------------
PM   Вверх
nitr
Дата 23.12.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



проверил скрипт на 
Цитата

c:\>3.pl
49980
c:\>

скрипт считает количество ссылок smile
Скрипт с твоми кодом "не отвалился"!
Код твой рабочий, но требует оптимизации, не надо провоцировать людей, конкретно спрашивать smile
Да - он "загоняет" это всё в ОЗУ (281 504Кб)


--------------------
PM   Вверх
DooZ
Дата 27.12.2006, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



видимо косяк в модулях действительно
буду искать =)
сенькс
PM MAIL   Вверх
DooZ
Дата 29.12.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



возник новый вопрос:
для начала сенькс всем кто учавствовал и учавствует в теме, разобрался дело было в модуле

вот есть массив с большим кол-вом ссылок скажем 100к ссылок
можно ли как-то сделать, что бы работало в цикле, а именно типа

foreach my $url (@url)
{
POE::Session->create
(inline_states =>
{_start => sub {$_[KERNEL]->post(ua => request => got_response => GET $url);},
got_response => \&client_handle_response});
}

НО не как работает в данном варианте (ДОЛГО, ОЧЕНЬ ДОЛГО он думает потом начинает работу) а по мере поступления инфы
тобишь получил первую ссылку и погнал ее обрабатывать, в том время как дальше по циклу наполняются остальные
т.е. сразу по мере получения начал отрабатывать

заранее сенькс
PM MAIL   Вверх
DooZ
Дата 2.1.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



есть идеи?
PM MAIL   Вверх
DooZ
Дата 22.1.2007, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 25.11.2005

Репутация: нет
Всего: 1



ап
PM MAIL   Вверх
Ramirez
Дата 7.2.2007, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



так ты @url из файла наверное наполняешь? так не гони все это в память. в цикле чтения и запускай обработчиков.
PM ICQ   Вверх
Nab
Дата 1.3.2007, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 26
Всего: 37



Ну что разобрался? Или так и пытаешься все в цикле сделать?

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

У меня другая немного проблема, потому как я всеже не по ссылкам лажу, хотя это тоже предстоит, я проверяю один адрес, но через разные прокси, соответственно большую нагрузку могу создать, поэтому ограничиваю свой поток запросов. Но все одно, через некоторое время стабильно 500 ошибка smile типа я заддосил этот урл smile


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
tishaishii
Дата 2.3.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



А шо воно такоэ?
PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1312 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.