繁体   English   中英

Celery + RabbitMQ结果后端+ WebSockets?

[英]Celery + RabbitMQ Results Backend + WebSockets?

我有一个Flask Web应用程序,有一些任务长期运行(> 1分钟)。 我想从烧瓶中卸载这些(阻止Web服务器等)并将它们移动到外部任务中。 我得到了Celery设置,能够从Flask运行这些任务。 好。

要在任务完成时通知用户并返回结果,我想使用Web套接字。 这是它变得艰难的地方。

我有一个运行我的客户端连接的gevent websocket服务器。 当我启动芹菜任务时,我会传递客户端的会话ID,这样当我得到我的结果时,我知道他们属于谁。

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

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

如何在不阻塞的情况下收听芹菜事件?

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

你需要你的烧瓶应用程序不要阻止捕获呼叫。 一种解决方案是使用gevent或eventlet运行flask,以便您的进程将异步处理请求,阻塞调用不会阻止进程。

有很多例子,请注意: https//gist.github.com/lrvick/1185629

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM