python - 你应该在哪里更新 celery 设置?在远程 worker 或发件人?

标签 python django rabbitmq celery

您应该在哪里更新 celery 设置?在远程工作人员还是发件人?

例如,我有一个使用 Django 和 Celery 的 API。 API 通过代理 (RabbitMQ) 将远程作业发送给我的远程工作人员。工作人员正在运行 python 脚本(不使用 Django),有时这些工作会产生子任务。

我已经在双方(发件人和工作人员)上创建了 celery 设置,即他们都需要设置 BROKER_URL。但是,假设我想添加设置 CELERY_ACKS_LATE = True我应该将此设置添加到哪一端? 每个远程 worker 或发送者 (API)?

API 和远程 worker 都连接到同一个 Broker,每个都以不同的方式启动 celery。 API 通过 Django __init__.py 创建一个 celery 实例,worker 通过 supervisor 启动 celery,即 celery -A tasks worker -l info

最佳答案

django celery 设置只影响在 django 服务器本身上运行的 worker。

如果您的所有工作人员都是远程工作人员(就像我这样做的方式),那么在发送方,您需要做的就是将提交任务所需的配置放入任务队列。

所有其他设置都需要在远程工作人员上进行设置。

对于任务,在发送方,我需要做的就是像这样定义任务签名:

@app.task(name='report_task')
def reportTask(self, link):
    pass

然后在 worker 端,您需要创建一个新的同名 Celery 应用程序并指向同一个代理;对于其他 celery 设置,您需要在远程工作人员上声明它们。

并在远程工作人员上实现任务逻辑(只要他们具有相同的任务名称和函数参数,您就可以为每个工作人员设置不同的任务逻辑)

关于python - 你应该在哪里更新 celery 设置?在远程 worker 或发件人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117752/

相关文章:

python - 使用arrow python将人性化时间转换为UTC时间

python - 需要模板化配置文件和审核的建议

使用 Postgres 处理 Django 时区

mysql - 当我尝试在 Django shell 中检查 MySQLdb 连接器时出现错误

python - 安装 Django-channels 报错

python - PySpark 正则表达式加入

python - 使用来自另一个 pandas DF 的最小值的 id 填充 pandas 列

rabbitmq - 使用 RabbitMQ 停止 MassTransit 中的特定使用者

node.js - RabbitMQ 消息神秘消失

java - 无法使用java从rabbitmq中的传递回调 block 分配消息