gpt4 book ai didi

python - Python 的事件框架?

转载 作者:太空狗 更新时间:2023-10-29 20:23:09 26 4
gpt4 key购买 nike

<分区>

我正在构建一个可与网络客户端 (Django) 和远程 API(可能是独立守护程序)配合使用的系统。我发现使用一些事件框架(如 JavaScript)来协调他们的工作会更容易。不幸的是,Django 信号是同步的,这会使对客户端的回复非常慢。此外,我可能希望能够将守护进程或其部分迁移到单独的机器,但仍然以相同的方式工作(不是 RPC,只是触发事件或发送消息)。 (这听起来像是 Erlang 的方法。)

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

至于 Twisted,André Paramés 建议,我更喜欢更简单的代码。这在 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 View 文件使用一些模型并通知其他人事件。并且有一个独立的守护进程脚本可以无限运行并对事件使用react。

这只是伪代码,我只是说它应该有多简单。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com