aliens
Май 29, 2011 22:22:30
Здравствуйте
Почитав документацию по твистеду, понял что несколько реакторов использовать в 1 программе нельзя. А как быть, если в рамках 1 программы требуется производить разные действия?
Для примера, есть модуль txNetTools (реализует ICMP), у него свой реактор, а для использования например неблокирующего интернет-клиента (замена urllib), используется стандартный из twisted.internet. Как в таком случае быть?
Также не совсем понял, а как пересекать различные протоколы, через Factory?
Задача достаточно простая, получать из базы N хостов и действий что с ними делать (создать запрос по 1 сетевому клиенту или по другому), а результат записать в базу. Вот тут и приходит ступор :(
aliens
Май 29, 2011 22:44:30
Также возник вопрос, а как запустить например 5 одинаковых задач, но с различными аргументами? (клиентов, чтобы например пинговать сразу 5 хостов)
Андрей Светлов
Май 30, 2011 12:28:39
Для начала подойдет реактор из txNetTools для всех задач.
Пересечение различных протоколов — неизвестный мне термин.
Для пингования пяти хостов запустите 5 клиентских фабрик.
aliens
Май 30, 2011 15:58:39
Андрей Светлов
Пересечение различных протоколов — неизвестный мне термин.
Фабрики/протоколы совершенно разные, работающие по вебу и работающие с базой например, надо из базы передать данные в фабрику работающую с сетью. Но наверно это все же частный случай какой-то и смотреть по коду надо
Для запуска 5 фабрик имеется ввиду типа:
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.run()
А как-то фабрики запускать, уже когда реактор работает можно?
Извините за тупые вопросы, подозреваю, что именно также и можно
aliens
Май 30, 2011 16:13:49
На счет запуска многих - понял.
А вот как передать данные из 1 фабрики в другую?
Например, при получении данных из базы данных передать их в фабрику, работающую с сетью
Андрей Светлов
Май 30, 2011 22:07:04
Вы посмотрите, как работает twisted.web.client:getPage
Она возвращает deferred. На этот deferred навешивается callback.
Который сам например, вызовет новый getPage передав ему что нужно и навесив другой callback.
Или в callback сделаете ping, навесив на его deferred еще какой обработчик.
Обратите внимание: getPage создает новую client factory и регистрирует ее в реакторе.
Примерно так все клиентские фабрики и работают. Серверные фабрики создаются обычно до запуска реактора и живут вечно.
aliens
Май 31, 2011 20:05:58
Андрей Светлов
Спасибо, буду смотреть исходники, пробовать.
Как работает - понял :)