Найти - Пользователи
Полная версия: twisted и несколько разных reactor
Начало » Network » twisted и несколько разных reactor
1
aliens
Здравствуйте

Почитав документацию по твистеду, понял что несколько реакторов использовать в 1 программе нельзя. А как быть, если в рамках 1 программы требуется производить разные действия?
Для примера, есть модуль txNetTools (реализует ICMP), у него свой реактор, а для использования например неблокирующего интернет-клиента (замена urllib), используется стандартный из twisted.internet. Как в таком случае быть?
Также не совсем понял, а как пересекать различные протоколы, через Factory?

Задача достаточно простая, получать из базы N хостов и действий что с ними делать (создать запрос по 1 сетевому клиенту или по другому), а результат записать в базу. Вот тут и приходит ступор :(
aliens
Также возник вопрос, а как запустить например 5 одинаковых задач, но с различными аргументами? (клиентов, чтобы например пинговать сразу 5 хостов)
Андрей Светлов
Для начала подойдет реактор из txNetTools для всех задач.
Пересечение различных протоколов — неизвестный мне термин.
Для пингования пяти хостов запустите 5 клиентских фабрик.
aliens
Андрей Светлов
Пересечение различных протоколов — неизвестный мне термин.
Фабрики/протоколы совершенно разные, работающие по вебу и работающие с базой например, надо из базы передать данные в фабрику работающую с сетью. Но наверно это все же частный случай какой-то и смотреть по коду надо
Для запуска 5 фабрик имеется ввиду типа:
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.run()
А как-то фабрики запускать, уже когда реактор работает можно?
Извините за тупые вопросы, подозреваю, что именно также и можно
aliens
На счет запуска многих - понял.
А вот как передать данные из 1 фабрики в другую?
Например, при получении данных из базы данных передать их в фабрику, работающую с сетью
Андрей Светлов
Вы посмотрите, как работает twisted.web.client:getPage
Она возвращает deferred. На этот deferred навешивается callback.
Который сам например, вызовет новый getPage передав ему что нужно и навесив другой callback.
Или в callback сделаете ping, навесив на его deferred еще какой обработчик.

Обратите внимание: getPage создает новую client factory и регистрирует ее в реакторе.

Примерно так все клиентские фабрики и работают. Серверные фабрики создаются обычно до запуска реактора и живут вечно.
aliens
Андрей Светлов
Спасибо, буду смотреть исходники, пробовать.
Как работает - понял :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB