Структура событий для Python?

Я создаю систему, которая работает с веб-клиентами (Django) и удаленными API (возможно, автономным демоном). Я вижу, что легче скоординировать свою работу с некоторыми фреймворками событий, как в JavaScript. К сожалению, сигналы Django синхронны, что будет очень медленным. Кроме того, я могу захотеть перенести демона или его часть на отдельный компьютер, но все равно работать одинаково (не RPC, а просто запускать событие или отправлять сообщение). (Это может звучать как подход Эрланга.)

Существуют ли рамки, которые бы использовали проверенные и надежные способы взаимодействия между процессами (скажем, RabbitMQ) и требовали минимального шаблона?

Что касается Twisted, это предложил Андре Парамас, я бы предпочел более простой код. Это можно сделать в Twisted?

from events_framework import subscribe, trigger from django.http import Client http_client = Client() # just a sample @subscribe('data_received'): def reply(data): http_client.post('http://www.example.com', data) trigger('data_resent', data) 

Вот подробности. Существует файл представлений Django, который использует некоторые модели и уведомляет других о событиях. И есть отдельный сценарий демона, который работает бесконечно и реагирует на события.

Это просто псевдокод , я имею в виду только то, насколько легко это должно быть.

 # django_project/views.py (a Django views file) from events_framework import publish, subscribe from annoying import @subscribe('settings_updated') def _on_settings_update(event): # listens to settings_updated event and saves the data Settings.object.get(user__id=event.user_id).update(event.new_settings) @render_to('form.html') def show_form(request): # triggers 'form_shown' event publish('form_shown', {'user_id': request.user.id, 'form_data': request.GET}) return {...} # script.py (a standalone script) from events_framework import publish, subscribe @subscribe('form_shown') def on_form_shown(event): # listens to form_shown event and triggers another event pass result = requests.get('third party url', some_data) publish('third_party_requested', {'result': result}) 

Опять же, это невозможно сделать только с помощью сигналов Django: некоторые события нужно публиковать по сети, другие должны быть локальными, но асинхронными.

Может потребоваться сделать что-то, например,

 from events_framework import Environment env = Environment() # will connect to default rabbitmq server from settings. 

3 Solutions collect form web for “Структура событий для Python?”

Контрольные схемы : легкая управляемая событиями и асинхронная платформа приложений для языка программирования Python с сильной архитектурой компонентов.

Я решил, что Celery с RabbitMQ – самая зрелая программная комбинация, и я буду придерживаться их. Сельдерей позволяет не просто создавать события, но и гибкую специализацию через маршрутизацию очереди и распараллеливание .

Django ztaskd – это способ вызова асинхронных задач из Django через ZeroMQ (через pyzmq ).

  • wxPython: привязка wx.EVT_CHAR_HOOK отключает backcpace TextCtrl
  • Программирование Pygame, чтобы я мог нажимать сразу несколько клавиш, чтобы заставить моего персонажа двигаться по диагонали
  • Как передать аргумент обработчику событий в tkinter?
  • События малины Pi- GPIO в Python
  • как очистить ссылку дочернего окна, хранящуюся в родительском приложении, когда закрывается дочернее окно?
  • Лучший способ получить название кнопки, которая называется событием?
  • «Выбрать» в нескольких очередях многопроцессорности Python?
  • Сигнал Enter-Notify-Event не работает с gtk.ToolButton
  • Создание простого индикатора выполнения или загрузка анимации в Kivy
  • wxpython - потоки и события окна
  • Tkinter. После окна замораживания метода?
  • Python - лучший язык программирования в мире.