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