独角兽多瓶工人和芹菜绑定任务

时间:2020-09-10 06:03:59

标签: python flask celery gunicorn

下面是this guide复杂示例:显示状态更新和结果部分),我有2个flask端点用于启动绑定任务(POST请求)并按其ID(GET)检索任务结果请求/ status / )。

在一个shell中以<div class="col-12 col-lg-6 col-xl-5 pb-3 pb-lg-0"><iframe class="agent-video-iframe border-0" height="326px" ng-src="{{agent.video_url }}" width="100%"></iframe></div> <!-- <div class="col-12 col-lg-6 col-xl-5 pb-3 pb-lg-0"><iframe class="agent-video-iframe border-0" height="326px" src="https://www.youtube.com/embed/KYPRQStfRWo" width="100%"></iframe></div>--> 运行烧瓶应用程序,在另一个shell中以flask run运行烧瓶应用程序,可以运行任务,然后通过对/ status /端点的GET请求获得其结果。

添加gunicorn并将工人数设置为3后,POST请求可以正常运行,但是获取特定正在运行的任务的状态是一个问题,因为它无法获取任务(task.info为None)。可以通过此状态端点获得任务结果,但是如果我正确理解了该问题,则取决于将请求重定向到哪个烧瓶实例gunicorn。

我没有设置任何特定的芹菜设置,仅设置了broker和result_backend(使用RabbitMQ)。

如何为此类任务正确配置gunicorn + flask + celery?

1 个答案:

答案 0 :(得分:0)

通过使用redis作为结果后端(或我认为不是RPC的其他后端)修复。

根据documentation

RPC结果后端(rpc://)很特殊,因为它实际上并不存储状态,而是将其作为消息发送。这是一个重要的区别,因为这意味着只能将结果检索一次,并且只能由发起任务的客户端检索。两种不同的过程不能等待相同的结果。