你应该在哪里更新Celery设置?在远程工作人员或发件人?

时间:2016-01-31 18:39:46

标签: python django rabbitmq celery

您应该在哪里更新芹菜设置?在远程工作人员或发件人上?

例如,我有一个使用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

2 个答案:

答案 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中更新文件并部署后 - 重新启动所有各方。

但在这种情况下,使用此特定标志,您只能重新启动工作程序。