Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Как запускать Twisted-сервер из Python-приложения [RSS Feed]

#1 Июнь 25, 2008 22:51:21

PyCraft
От:
Зарегистрирован: 2008-05-23
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запускать Twisted-сервер из Python-приложения

Андрей Светлов
По поводу интерфейса - интересовал не сетевой протокол, а программный API этих взаимоменяемых модулей.
Не знаю. я пока не думал об API, полагая что это как-то не сложно реализуется. API наверное не для модулей, а для ядра.
Буду признателен за идеи.

А что насчет опосредованного запуска через twistd? Криво как-то. Это можно обойти?



Отредактировано (Июнь 25, 2008 22:56:40)

Офлайн

#2 Июнь 25, 2008 23:06:25

PyCraft
От:
Зарегистрирован: 2008-05-23
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запускать Twisted-сервер из Python-приложения

bw
p.s. Как вариант, предусмотри в своем интерфейсе возможность интеграции главного цикла (если его нет, попробуй сделать) своего приложения и сетевого модуля (Twisted, в данном случае). Такой вариант использования Twisted был бы предпочтительнее. Twisted предоставляет механизмы такой интеграции, но кодить все же придется. В том числе по этой причине существует несколько реализаций реактора, но все они крутят цикл, это условие обязательное.
А можно поподробнее про этот вариант и механизмы Twisted?



Офлайн

#3 Июнь 26, 2008 07:32:32

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Как запускать Twisted-сервер из Python-приложения

Андрей Светлов, я подобными экспериментами не занимался, так что да, такая неприятность может иметь место быть. Как вариант написать свою реализацию реактора (который будет работать в потоке), это не должно быть очень сложно, 2-3 часа на глаз.

PyCraft:
http://twistedmatrix.com/projects/core/documentation/howto/choosing-reactor.html
http://twistedmatrix.com/documents/current/api/twisted.internet.base.ReactorBase.html
http://twistedmatrix.com/documents/current/api/twisted.internet.gtk2reactor.html
и т.д.

Изучай исходники, документации нет. Смотри “примеры” - gtk2reactor, wxreactor и т.д.

..bw



Офлайн

#4 Июнь 26, 2008 13:26:29

PyCraft
От:
Зарегистрирован: 2008-05-23
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запускать Twisted-сервер из Python-приложения

Андрей Светлов
мои попытки завести в отдельном потоке натыкались на невозможность подвесить сигнал (signal.signal(signal.SIGINT, handler)) из потока, отличного от главного. Поэтому и танцы с бубном.
В документации не рекомендуется использовать сигналы для связи между потоками, вместо них рекомендуется использовать блокировки.
Там написано, что сигналы нужно использовать только в главном потоке.
Так что Twisted тут в общем то не при чем.
Должен быть другой путь для интеграции.
Может быть просто ссылки на функции передавать, как параметры?



Отредактировано (Июнь 26, 2008 13:27:27)

Офлайн

#5 Июнь 26, 2008 17:39:01

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

Как запускать Twisted-сервер из Python-приложения

Сигналы пытался навесить именно реактор, а не я. Впрочем, bw прав - можно написать и свою реализацию реактора, если очень хочется. Правда, я бы оценил время как несколько превышающее два-три часа :) Но в любом случае не очень долго



Офлайн

#6 Июнь 26, 2008 18:31:44

PyCraft
От:
Зарегистрирован: 2008-05-23
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Как запускать Twisted-сервер из Python-приложения

Андрей Светлов
Сигналы пытался навесить именно реактор, а не я.
Тогда это приговор твистеду. С бубном я плясать не стану и заново переписывать его не готов.
Проще что-нибудь попроще использовать и самому нужную инфраструктуру создать.

Вот сейчас проверил аналогичную задачу на обычных ссылках на функции. Потребовалось всего то объявить их global и никаких проблем вызова из потока. Почему такие проблемы у сигналов, ведь смысл примерно похожий?

Если бы можно было сигнал подвешивать до создания потока… Например, я сначала инициализирую все ссылки на функции “ядра” в импортируемом модуле, а затем запускаю его стартовую функцию в потоке, который вызывает по глобальной ссылке функции “ядра” и передает ядру ссылки на свои функции, которые запускаются в уже в главном потоке. Аналогично, через глобальные списки можно реализовать “сигналы” для потока, который просматривает спсок и выполняет функции из этого списка.



Отредактировано (Июнь 26, 2008 18:57:19)

Офлайн

#7 Июнь 27, 2008 02:55:09

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

Как запускать Twisted-сервер из Python-приложения

Похоже, ты хочешь использовать его немного не так, как предполагали создатели.
Я при надлежащем использовании проблем не испытывал. Как для клиента, так и для сервера.

Глобальные функции и списки - это, конечно, хорошо. Twisted гораздо гибче и ничего подобного его deferred я еще не видел.



Офлайн

  • Начало
  • » Network
  • » Как запускать Twisted-сервер из Python-приложения[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version