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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение многопоточности и Async, Parallel, Кто нибудь реально пробовал??? 
:(
    Опции темы
burakov
Дата 22.5.2011, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да все таки многопоточность более честный вариант - там хотя бы понятно - что и как smile.
попытаюсь все таки упростить код и дам в студию


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
burakov
Дата 23.5.2011, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как с помощью AnyEvent::HTTP
сохранить картинку ?
все таки решил не отказываться от него, ибо если уж тянет контент - то делает это очень быстро.



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
djusha
Дата 23.5.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хорошая тема.
Многопоточность это хорошо... но хочется чтобы каждый запрос шел с разных IP адресов...

IP у хостера можно купить... не проблема...

При работе с  LWP::UserAgent можно использовать 
@LWP::Protocol::http::EXTRA_SOCK_OPTS = (LocalAddr => $ips, Reuse => 1 );
и подставлять разные $ips на каждый поток...(ну как то так)


а как обстоит дело при работе с AnyEvent::HTTP ?

не прокси... именно IP...





Это сообщение отредактировал(а) djusha - 23.5.2011, 12:49
PM WWW   Вверх
burakov
Дата 23.5.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как с помощью AnyEvent::HTTP
сохранить картинку ?
все таки решил не отказываться от него, ибо если уж тянет контент - то делает это очень быстро.



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
Pfailed
Дата 23.5.2011, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 39



Цитата(djusha @  23.5.2011,  12:48 Найти цитируемый пост)
При работе с  LWP::UserAgent можно использовать 
@LWP::Protocol::http::EXTRA_SOCK_OPTS = (LocalAddr => $ips, Reuse => 1 );

В LWP это делается более прямо если почитать документацию: LWP::UserAgent->new(local_address => $ip)


Цитата(djusha @  23.5.2011,  12:48 Найти цитируемый пост)
а как обстоит дело при работе с AnyEvent::HTTP ?

Нормально. В описании параметра on_prepare сказано об этом.

Добавлено через 5 минут и 16 секунд
Цитата(burakov @  23.5.2011,  12:49 Найти цитируемый пост)
А как с помощью AnyEvent::HTTP
сохранить картинку ?

Также как и всё остальное. Если файл большой и хочется по мере получения писать его в файл на локальном носителе, то см. описание параметра on_body.


--------------------
PM MAIL   Вверх
djusha
Дата 23.5.2011, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Pfailed @ 23.5.2011,  14:01)
Цитата(djusha @  23.5.2011,  12:48 Найти цитируемый пост)
При работе с  LWP::UserAgent можно использовать 
@LWP::Protocol::http::EXTRA_SOCK_OPTS = (LocalAddr => $ips, Reuse => 1 );

В LWP это делается более прямо если почитать документацию: LWP::UserAgent->new(local_address => $ip)


Цитата(djusha @  23.5.2011,  12:48 Найти цитируемый пост)
а как обстоит дело при работе с AnyEvent::HTTP ?

Нормально. В описании параметра on_prepare сказано об этом.

за LWP::UserAgent->new(local_address => $ip) спасибо... действительно проще и правильней

$ua ->local_address($ips); 

и все дела...

а вот с on_prepare => $callback->($fh) не обессудте... недоходит...

можете примерчиком побаловать?


PM WWW   Вверх
Pfailed
Дата 23.5.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 39



Судя по документации так
Код

http_get 'http://www.google.ru/',
    on_prepare => sub {
        bind($_[0], AnyEvent::Socket::pack_sockaddr(0, v10.192.130.15)); # bind to specified ip address
        15; # connect timeout
    },
    sub {
        print $_[0];
    };


Проверяйте


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


Новичок



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

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



Pfailed,  спасибо за подсказку!

кстати, видел Вашу статью - "use Coro, история успеха" http://forum.vingrad.ru/forum/topic-317827...vent/index.html

интересна связка Coro с LWP::UserAgent

возник вопрос... делали ли Вы какие либо замеры по производительности...

Если бы Вы сейчас начали делать что либо с НУЛЯ, что бы Вы выбрали,  

AnyEvent::HTTP  или Coro  в связке с LWP::UserAgent  ?

Это сообщение отредактировал(а) djusha - 24.5.2011, 09:24
PM WWW   Вверх
Pfailed
Дата 24.5.2011, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 39



djusha, замеров не делал, но здравый смысл подсказывает, что AnyEvent::HTTP быстрее, а Coro + LWP легче при написании кода.
Если нужно что-то сильно производительное, скажем больше 500 одновременных соединений, я бы озадачился AnyEvent::HTTP иначе удобнее Coro.


--------------------
PM MAIL   Вверх
djusha
Дата 25.5.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(burakov @ 22.5.2011,  21:17)
хрен поймешь
зависимость работы парсера от таймаут такая
если ставлю его = 5. то URL (одни и те же) идут то ответом 200, то 596,
если увеличиваю его по дефолту (то есть по сути сильно увеличиваю), то парсер подвисает.
Я пытаюсь Вас спросить - что это за параметр таймаут?
Я так для себя понял - что это время ожидания ответа от посланного http запроса, если в течении (когда =5) 5 секкунд ответа нет коннект отбрасывается с каким то кодом ошибки (ну пусть к примеру как у меня 596) так ли это?

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

по поводу того, что сам парсер написан неправильно...

ошибки идут только на конкретном сайте, кроме этого парсер был обробован и локально и на двух других - таких проблем не было ... работало четко.
Могу выложить весь код парсера 200 строк

А скрипт запускаете из винды или и линукса?

просто я озадачился примерно этим же...

если запускаю скрипт на AnyEvent::HTTP из винды,  и делаю запрос на какой либо сайт в инете, то все нормально...

если делаю запрос на сайт, который находится этой же машине, на виртуальной машине VMware, под CentOS55, то получаю ошибку 595....

LWP к этому же сайту при запросах не имеет проблем... есть над чем репу почесать...



PM WWW   Вверх
EcSYZ
Дата 25.5.2011, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну, некоторые моменты в данном деле остаются не ясны, но я уже начал приписывать к своему пауку log4perl, а потом ещё и через прокси пущу ... тогда мож что и выяснится.
А пока что остаётся предполагать, что все проблемы вызваны влиянимем марсианских бурь  smile 
PM MAIL WWW   Вверх
burakov
Дата 25.5.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Скрипт я запускаю из под WinXP, который стоит на локальной машине, подключенной к инету.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
djusha
Дата 1.6.2011, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Pfailed @ 23.5.2011,  15:26)
Судя по документации так
Код

http_get 'http://www.google.ru/',
    on_prepare => sub {
        bind($_[0], AnyEvent::Socket::pack_sockaddr(0, v10.192.130.15)); # bind to specified ip address
        15; # connect timeout
    },
    sub {
        print $_[0];
    };


Проверяйте

да, в том виде, как есть работает....

Код
 bind($_[0], AnyEvent::Socket::pack_sockaddr(0, v10.192.130.15));



но мне IP адреса по очереди перебирать нужно или рандомно.... не могу понять....

Простой пример... вот так, без кавычек работает...

Код
 
$ips = v10.192.130.15;

bind($_[0], AnyEvent::Socket::pack_sockaddr(0, $ips));


Если IP адрес брать в кавычки, то нет... в цикле тоже не получается...

вот часть кода... код с одним IP естественно работает... нужно чтобы работало со списком IP из файла...


Подскажите, ато уже по разному перепробовал... ума никак не дам...

Это сообщение отредактировал(а) djusha - 5.6.2011, 16:01
PM WWW   Вверх
Pfailed
Дата 1.6.2011, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 39



Если я правильно понял вопрос: v192.168.75.85 это тоже, что  AnyEvent::Socket::parse_ipv4("192.168.75.85")


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


Новичок



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

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



Цитата(Pfailed @ 1.6.2011,  15:49)
Если я правильно понял вопрос: v192.168.75.85 это тоже, что  AnyEvent::Socket::parse_ipv4("192.168.75.85")



Хех... спасибо!!! все, заработало, разобрался smile

Осталось понять, каким образом IP последовательно гонять, вместо генератора рандомных чисел... что то он не совсем рандомно делает...


Плохо то, что с терминами слаб... приходится на пальцах... 300 лет перлом не занимался... все с таким трудом вспоминается...

Это сообщение отредактировал(а) djusha - 1.6.2011, 17:54
PM WWW   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


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

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


 




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


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

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