我正在运行一个celery 工作进程**--concurrency=10**。因此,在我的环境中有10个进程并行运行。
当一个任务被执行并返回时,我希望我的服务器告诉(工作者)进程杀死自己。然后,由于并发性,它应该创建一个新的。
我该怎么做呢?我正在考虑SIGNALS -〉task_postrun
编辑:
在正确设置应用程序(使用下面的 --max-task-per-child)后,我遇到了一个问题,即从子进程中得到了退出代码143。
这是因为进程被终止,服务器不处理它。
解决方案是在任务运行后立即撤销流程:
from celery.signals import task_postrun
from celery.task.control import revoke
@task_postrun
def setup_task_postrun(task_id, task, *args,**kwargs):
revoke(task_id=task_id, terminate=True)
我不确定这是一个好的做法,但它的工作
1条答案
按热度按时间vlju58qv1#
这是一个比较奇怪的要求,但是对于Celery来说很容易做到。你所要做的就是在Celery配置中加入以下内容:
每个子项的worker最大任务数=1