你应该在哪里更新芹菜设置?在远程工作者或发送者上?

2024-04-20 14:04:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我在两边(sender和worker)都创建了celery设置,即它们都需要设置BROKER_URL。但是,假设我要添加设置CELERY_ACKS_LATE = True我要将此设置添加到哪一端?每个远程工作进程或发送方(API)?在

API和远程工作线程都连接到同一个代理,每个代理启动celery的方式不同。API通过Django__init__.py创建一个celry实例,工人通过supervisor即celery -A tasks worker -l info启动celeri


Tags: django脚本api代理远程作业rabbitmqcelery
2条回答

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

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

所有其他设置都需要在远程工作者上设置。在

对于任务,在发送方,我只需要定义任务签名如下:

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

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

并在远程worker上实现任务逻辑(每个worker可以有不同的任务逻辑,只要它们具有相同的任务名称和函数参数)

CELERY_ACKS_LATE = True属于worker。它描述了worker是在使用任务后(完成之前)还是完成之后(延迟)立即将任务标记为“已确认”。两种方法have their drawbacks和我想你知道你在做什么。在

当然,最好双方都有一个配置文件并使用它。例如,拥有整个项目的通用代码库,并在VCS中更新文件后部署-重新启动所有各方。在

但是在这种情况下,使用这个特定的标志,您只能重新启动workers。在

相关问题 更多 >