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可能已经完成了任务,从队列中抓取了另一个任务并开始处理它。当它最终接收到命令时,它只是终止工作进程,到那时,它可能已经在处理不同的任务了
如果您事先知道可能需要中止任务,并且可以调整任务代码,您可以查看。这里应该有一个警告,这需要数据库后端设置。