Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2011 22:22:30

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

twisted и несколько разных reactor

Здравствуйте

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

Задача достаточно простая, получать из базы N хостов и действий что с ними делать (создать запрос по 1 сетевому клиенту или по другому), а результат записать в базу. Вот тут и приходит ступор :(



Офлайн

#2 Май 29, 2011 22:44:30

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

twisted и несколько разных reactor

Также возник вопрос, а как запустить например 5 одинаковых задач, но с различными аргументами? (клиентов, чтобы например пинговать сразу 5 хостов)



Офлайн

#3 Май 30, 2011 12:28:39

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

twisted и несколько разных reactor

Для начала подойдет реактор из txNetTools для всех задач.
Пересечение различных протоколов — неизвестный мне термин.
Для пингования пяти хостов запустите 5 клиентских фабрик.



Офлайн

#4 Май 30, 2011 15:58:39

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

twisted и несколько разных reactor

Андрей Светлов
Пересечение различных протоколов — неизвестный мне термин.
Фабрики/протоколы совершенно разные, работающие по вебу и работающие с базой например, надо из базы передать данные в фабрику работающую с сетью. Но наверно это все же частный случай какой-то и смотреть по коду надо
Для запуска 5 фабрик имеется ввиду типа:
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.listenICMP(0, Pinger())
reactor.run()
А как-то фабрики запускать, уже когда реактор работает можно?
Извините за тупые вопросы, подозреваю, что именно также и можно



Отредактировано (Май 30, 2011 15:59:10)

Офлайн

#5 Май 30, 2011 16:13:49

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

twisted и несколько разных reactor

На счет запуска многих - понял.
А вот как передать данные из 1 фабрики в другую?
Например, при получении данных из базы данных передать их в фабрику, работающую с сетью



Офлайн

#6 Май 30, 2011 22:07:04

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

twisted и несколько разных reactor

Вы посмотрите, как работает twisted.web.client:getPage
Она возвращает deferred. На этот deferred навешивается callback.
Который сам например, вызовет новый getPage передав ему что нужно и навесив другой callback.
Или в callback сделаете ping, навесив на его deferred еще какой обработчик.

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

Примерно так все клиентские фабрики и работают. Серверные фабрики создаются обычно до запуска реактора и живут вечно.



Офлайн

#7 Май 31, 2011 20:05:58

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

twisted и несколько разных reactor

Андрей Светлов
Спасибо, буду смотреть исходники, пробовать.
Как работает - понял :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version