【问题标题】:Gunicorn multiple flask workers and bound tasks celeryGunicorn 多个烧瓶工人和绑定任务 celery
【发布时间】:2020-12-28 14:19:41
【问题描述】:

按照this guide复杂示例:显示状态更新和结果部分)我有 2 个烧瓶端点用于启动绑定任务(POST 请求)并通过其 id 检索任务结果(GET 请求到/status/)。

在一个 shell 中以 flask run 和在另一个 shell 中以 celery worker -A app.celery -l info 运行烧瓶应用程序,可以运行任务,然后通过对 /status/ 端点的 GET 请求获取其结果。

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

我没有设置任何特定的 celery 设置,只有 broker 和 result_backend(使用 RabbitMQ)。

如何正确配置 gunicorn+flask+celery 来完成这类任务?

【问题讨论】:

    标签: python flask celery gunicorn


    【解决方案1】:

    已通过使用 redis 作为结果后端(或除 RPC 之外的任何其他方式,我相信)来修复。

    根据documentation

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

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 2020-03-16
      • 2019-01-07
      • 2023-03-11
      • 2017-06-06
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      相关资源
      最近更新 更多