多码头工人应用程序中的芹菜

Celery in multidocker worker application

项目结构

app/
    flask_app/
        app.py
        Dockerfile
    worker_type_1/
        worker_core/
            core.py
        celery.py
        Dockerfile
    worker_type_3/
        worker_core/
            core.py
        celery.py
        Dockerfile
    worker_type_3/
        worker_core/
            core.py
        celery.py
        Dockerfile

每个工人执行不同的任务。 flask_app 完成了任务。 Dockerfile 运行芹菜工人。

关于这个我有几个问题。

  1. 这是构建项目的正确方法吗?
  2. worker 监听队列应该在哪里定义?

我不会采用这种方法,而是构建一个配置了环境变量的代码库和容器。

由于您希望有不同的“类”工作人员用于自动缩放目的,我会使用 Celery Task Routing 将您的任务推送到适当的队列。

部署工作人员时,celery 有一个参数来定义要处理的队列,因此您只需要更改容器中工作人员的启动命令。最好的办法是将其设置为环境变量,以便您的供应脚本可以轻松启动它。

celery -A proj worker -Q $QUEUE_NAME

这样做的好处是简化了构建、调试和部署过程。