使用djcelery时,Revoke、Terminate和Kill有什么区别?

1 投票
1 回答
727 浏览
提问于 2025-05-01 17:44

我正在使用djcelery和Django的管理网站。如果我想停止一个已经开始的djcelery任务,我是用revoke、terminate还是kill,这三者有什么区别呢?

暂无标签

1 个回答

2

你应该使用 terminate 来结束一个已经开始的任务。

撤销(revoke):

>>> from celery.task.control import revoke
>>> revoke(task_id)

当一个工作者收到撤销请求时,它会跳过执行这个任务,但不会终止已经在执行的任务。

终止(terminate):

>>> from celery.task.control import revoke
>>> revoke(task_id, terminate=True)

如果设置了终止,处理这个任务的工作者子进程会被结束。默认发送的信号是 TERM。终止一个任务也会撤销它。

杀死(kill):

这和上面两个不同。 KILL 是用来杀死工作者的。

ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9

撰写回答