Gunicorn multiple flask workers 和绑定任务 celery
Gunicorn multiple flask workers and bound tasks celery
按照 this guide(复杂示例:显示状态更新和结果 部分)我有 2 个 flask 端点用于启动绑定任务(POST 请求)并通过其 ID 检索任务结果(对 /status/ 的 GET 请求)。
运行 flask app 作为 flask run
在一个 shell 和 celery worker -A app.celery -l info
在另一个中,可以 运行 任务然后得到它的结果通过 GET 请求到 /status/ 端点。
添加 gunicorn 并将工人数设置为 3 后,POST 请求 运行 正常,但获取特定 运行ning 任务的状态是一个问题,因为它可以' t 获取任务(task.info 是 None)。有机会通过此状态端点获取任务结果,但如果我正确理解问题,则取决于哪个 flask 实例 gunicorn 将请求重定向到。
我没有设置任何特定的芹菜设置,只有代理和 result_backend(使用 RabbitMQ)。
如何为这类任务正确配置 gunicorn+flask+celery?
已通过使用 redis 作为结果后端(或者我认为是 RPC 以外的任何其他后端)来修复。
The RPC result backend (rpc://) is special as it doesn’t actually store the states, but rather sends them as messages. This is an important difference as it means that a result can only be retrieved once, and only by the client that initiated the task. Two different processes can’t wait for the same result.
按照 this guide(复杂示例:显示状态更新和结果 部分)我有 2 个 flask 端点用于启动绑定任务(POST 请求)并通过其 ID 检索任务结果(对 /status/
运行 flask app 作为 flask run
在一个 shell 和 celery worker -A app.celery -l info
在另一个中,可以 运行 任务然后得到它的结果通过 GET 请求到 /status/ 端点。
添加 gunicorn 并将工人数设置为 3 后,POST 请求 运行 正常,但获取特定 运行ning 任务的状态是一个问题,因为它可以' t 获取任务(task.info 是 None)。有机会通过此状态端点获取任务结果,但如果我正确理解问题,则取决于哪个 flask 实例 gunicorn 将请求重定向到。
我没有设置任何特定的芹菜设置,只有代理和 result_backend(使用 RabbitMQ)。
如何为这类任务正确配置 gunicorn+flask+celery?
已通过使用 redis 作为结果后端(或者我认为是 RPC 以外的任何其他后端)来修复。
The RPC result backend (rpc://) is special as it doesn’t actually store the states, but rather sends them as messages. This is an important difference as it means that a result can only be retrieved once, and only by the client that initiated the task. Two different processes can’t wait for the same result.