开发者社区> 问答> 正文

Python的事件框架?

我正在构建一个可与Web客户端(Django)和远程API(可能是独立守护程序)一起使用的系统。我看到将它们的工作与JavaScript中的某些事件框架进行协调比较容易。不幸的是,Django信号是同步的,这会使回复客户端的速度很慢。另外,我可能希望能够将守护程序或其部分迁移到单独的计算机上,但仍以相同的方式工作(不是RPC,而是仅触发事件或发送消息)。(这听起来像是Erlang的方法。)

是否有一个框架可以使用经过验证的可靠方法在流程之间进行通信(例如RabbitMQ),并且需要最少的模板?

至于AndreParamés建议的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 views文件。还有一个独立的守护程序脚本,它可以无限运行并对事件做出反应。

这只是伪代码,我只是说它应该很容易。

# 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.

展开
收起
祖安文状元 2020-02-22 15:53:02 545 0
1 条回答
写回答
取消 提交回答
  • 检查电路:轻量级事件驱动的异步应用程序框架,用于Python编程语言,具有强大的组件体系结构。

    2020-02-22 15:53:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载