![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Qwadrat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.7.2009 Репутация: нет Всего: нет |
Есть небольшой скрипт, задача которого прочитать из файла список хостов и пропинговать каждый хост в отдельном потоке.
Каждый поток создает объект $p и выполняет $p->ping. Вроде как для каждого потока должен создаваться отдельный объект $p, но на деле $p->ping возвращает одинаковое значение для всех потоков, даже для тех, которые не должны пинговаться. Как сказать Перлу создавать уникальный объект, не пересекающийся с другими потоками? |
|||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
smokeping
![]() многопоточная штука для пингования |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
По идее - это поведение "по умолчанию", обычно наоборот нужно говорить, чтобы расшарить данные между потоками. Еще раз New::Ping->new или $p->ping возвращает одно и то же ? Может все хосты просто пингуются на ок ? Как вы определили что одно и то же ? |
|||
|
||||
Qwadrat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.7.2009 Репутация: нет Всего: нет |
В списке хостов забиты заведомо неправильный ip, которые не должны пинговаться
Но в этом куске кода результат выполнения всегда истина, т.е. $fails никогда не увеличивается.
А почему так происходит не могу понять. |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
Блин, у меня перл без потоков собран =(
Это именно в много поточном режиме происходит ? попробуйте а) запустить без потоков, последователный пинг б) оставить один дохлый хост - запустить один поток. Как я понял Net::Ping перловый модуль.. посему должен работать с потоками автоматически. Некоторые XS модули не thread-safe, т.е. не работают в многопоточном режиме. |
|||
|
||||
Qwadrat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.7.2009 Репутация: нет Всего: нет |
Да, именно в многопоточном.
Без потоков все работает как надо, просто при количестве хостов более 30 скорость работы скрипта уже не приемлема, поэтому хочется, чтобы каждый хост пинговался в отдельном потоке. Если запустить один тред с нерабочим хостом, скрипт тоже отрабатывает как надо, говорит что хост недоступен. Быть может действительно проблема именно в Net::Ping и стоит поискать альтернативу... |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
Qwadrat, Да. тогда вполне вероятно, что Net::Ping либо сам не thread-safe, либо используюет такой модуль.
Только советую искать альтернативу не Net::Ping'у а потокам. Потоки в перле - не совсем надежная вещь. Как вариант: 1) использовать процессы вместо потоков и IPC 2) использовать асинхронную работу с сетью. Для этого дела есть пара надежных фреймворков: POE и EV. Смотрите CPAN. Сами - по себе они универсальные, для любых асинхронных операций, но для них есть плагин, позволяющие пинговать сервер асинхронно. Например POE::Component::Client::Ping В случае 2) вы работает в однопоточном режиме. Это сообщение отредактировал(а) sir_nuf_nuf - 23.7.2009, 12:58 |
|||
|
||||
Qwadrat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 23.7.2009 Репутация: нет Всего: нет |
Нашел модуль Net::PingICMP, работающий под Windows. С полностью аналогичным синтаксисом все работает в многопоточном режиме, так что проблема точно в Net::Ping.
Большое спасибо за советы. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |