Celery:如何关闭/超时一个celery worker子进程/进程

3mpgtkmj  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(322)

我正在运行一个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)

我不确定这是一个好的做法,但它的工作

vlju58qv

vlju58qv1#

这是一个比较奇怪的要求,但是对于Celery来说很容易做到。你所要做的就是在Celery配置中加入以下内容:
每个子项的worker最大任务数=1

相关问题