Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以编程方式终止(取消)芹菜任务的最佳方式是什么_Python_Python 3.x_Celery - Fatal编程技术网

Python 以编程方式终止(取消)芹菜任务的最佳方式是什么

Python 以编程方式终止(取消)芹菜任务的最佳方式是什么,python,python-3.x,celery,Python,Python 3.x,Celery,根据芹菜的文档,我们不应该使用revoke()函数中的terminate选项来取消正在执行的任务: 终止选项是管理员在任务卡住时的最后手段。它不是用于终止任务,而是用于终止正在执行任务的进程,并且该进程可能已经在发送信号时开始处理另一个任务,因此,您决不能以编程方式调用它 因此,我的问题是,如果我需要以编程方式取消某些正在运行的任务,我应该如何正确地做?如果您确实需要终止正在运行的任务,在revoke()中使用terminate=True方法是正确的方法,也是您最好的选择。问题是这样做没有保证

根据芹菜的文档,我们不应该使用
revoke()
函数中的
terminate
选项来取消正在执行的任务:

终止选项是管理员在任务卡住时的最后手段。它不是用于终止任务,而是用于终止正在执行任务的进程,并且该进程可能已经在发送信号时开始处理另一个任务,因此,您决不能以编程方式调用它


因此,我的问题是,如果我需要以编程方式取消某些正在运行的任务,我应该如何正确地做?

如果您确实需要终止正在运行的任务,在
revoke()中使用
terminate=True
方法是正确的方法,也是您最好的选择。问题是这样做没有保证的效果,或者更确切地说,会有负面的副作用。要了解原因,有必要了解撤销是如何工作的,以及
terminate=True
的作用。当您调用
revoke()
时,您正在通过代理向工作人员发送广播消息。这意味着,在您意识到想要/需要终止任务、发送revoke消息并接收worker的控制命令之前,worker可能已经完成了任务,从队列中抓取了另一个任务并开始处理它。当它最终接收到命令时,它只是终止工作进程,到那时,它可能已经在处理不同的任务了


如果您事先知道可能需要中止任务,并且可以调整任务代码,您可以查看。

这里应该有一个警告,这需要数据库后端设置。