您应该在哪里更新芹菜设置?在远程工作人员或发件人上?
例如,我有一个使用Django和Celery的API。 API通过代理(RabbitMQ)将远程作业发送给我的远程工作人员。工作者正在运行python脚本(不使用Django),有时这些工作会产生子任务。
我已在双方(发件人和工作人员)创建了芹菜设置,即他们都需要设置BROKER_URL
。但是,我想添加设置CELERY_ACKS_LATE = True
,,我将此设置添加到哪个?每个远程工作人员或发件人(API)?
API和远程工作者都连接到同一个Broker,每个都以不同的方式启动芹菜。 API通过Django __init__.py
创建一个芹菜实例,工人通过主管启动芹菜,即celery -A tasks worker -l info
答案 0 :(得分:6)
django芹菜设置只影响在django服务器上运行的工作人员。
如果您的所有工作人员都是远程工作人员(就像我这样做的话),那么在发送方,您只需要将任务提交到任务队列所需的配置。
并且需要在远程工作人员上设置所有其他设置。
对于任务,在发送方,我需要做的就是像这样定义任务签名:
@app.task(name='report_task')
def reportTask(self, link):
pass
然后在工作人员方面,您需要创建一个具有相同名称并指向同一代理的新Celery应用程序;对于其他芹菜设置,您需要在远程工作人员上声明它们。
并在远程工具上实现任务逻辑(只要具有相同的任务名称和函数参数,每个工作者就可以拥有不同的任务逻辑)
答案 1 :(得分:2)
CELERY_ACKS_LATE = True
属于工人。它描述了工人是否应该将任务标记为已确认'消费后(完成前)或完成后(迟到)。这两种方法have their drawbacks我认为你知道你在做什么。
当然,为双方提供单一配置文件并使用它会更好。例如,为整个项目提供公共代码库,并在VCS中更新文件并部署后 - 重新启动所有各方。
但在这种情况下,使用此特定标志,您只能重新启动工作程序。