cul*_*rón 9 python events twisted message-queue
我正在构建一个与Web客户端(Django)和远程API(可能是一个独立的守护进程)一起工作的系统.我发现将它们的工作与JavaScript中的某些事件框架协调起来更容易.不幸的是,Django信号是同步的,这将使对客户端的回复非常慢.此外,我可能希望能够将守护程序或其部分迁移到单独的计算机,但仍以相同的方式工作(不是RPC,而只是触发事件或发送消息).(这听起来像是Erlang的方法.)
是否有一个框架可以使用经过验证的可靠方法在流程之间进行通信(例如,RabbitMQ),并且需要最少的样板?
至于Twisted,AndréParamés建议,我更喜欢更简单的代码.这在扭曲中是否可行?
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)
Run Code Online (Sandbox Code Playgroud)
这里有更多细节.有一个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})
Run Code Online (Sandbox Code Playgroud)
同样,这不能仅仅使用Django信号来完成:某些事件需要通过网络发布,其他事件应该是本地的但是异步的.
可能有必要实例化一些东西,比如
from events_framework import Environment
env = Environment() # will connect to default rabbitmq server from settings.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8801 次 |
最近记录: |