gpt4 book ai didi

python - Celery + RabbitMQ 结果后端 + WebSockets?

转载 作者:行者123 更新时间:2023-11-28 18:47:16 25 4
gpt4 key购买 nike

我有一个 Flask 网络应用程序,有些任务运行时间很长(> 1 分钟)。我想从 flask 中卸载这些(阻塞网络服务器等)并将它们移动到外部任务中。我安装了 Celery 并能够从 Flask 运行这些任务。好。

为了在任务完成时通知用户并返回结果,我想使用网络套接字。这就是困难所在。

我有一个 gevent websocket 服务器正在运行,我的客户端连接到该服务器。当我启动 celery 任务时,我传入客户端的 session ID,这样当我得到结果时,我就知道它们属于谁。

现在我需要 websocket 服务器知道这些任务何时完成,查看结果,并将它们发送到适当的连接。

如何?这是我完全迷路的地方。我可以使用 celery.events.EventListener.capture 监听 celery 事件,但这会阻塞我的 websocket 服务器,所以我不能有多个连接!

如何在不阻塞的情况下监听 celery 事件?

一个想法是通过网络套接字发出请求,然后从我的网络套接字服务器启动 celery 任务。这将解决通知问题(仅使用 celery 事件),但我仍然对我的原始问题感到好奇,我的标准 flask 服务器发出请求。

最佳答案

您需要您的 Flask 应用程序不阻塞捕获调用。一种解决方案是使用 gevent 或 eventlet 运行 flask,这样您的进程将异步处理请求并且阻塞调用不会阻塞进程。

关于这方面的例子有很多,举一个例子:https://gist.github.com/lrvick/1185629

关于python - Celery + RabbitMQ 结果后端 + WebSockets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18113034/

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