您应该在哪里更新 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/