Python 芹菜任务';s finally子句不';t执行,如何清理?

Python 芹菜任务';s finally子句不';t执行,如何清理?,python,celery,Python,Celery,我有一个芹菜任务,里面有一个finally子句。我发现有时该条款不起作用。我认为当任务超时时会发生这种情况,看起来芹菜会杀死它 让代码在芹菜任务之后执行的最佳实践是什么?不管是什么 这对任务成功不起作用,但我可以使用现有的finally语句来实现这一点,如果对超时也起作用的话,只需在\u failure中调用清理代码即可。清理代码是幂等的 我考虑过使用一个链来执行一个新任务,该任务将执行清理,但第二个任务只有在第一个任务成功时才会执行 我查看了文档,发现了一个on_failure任务方法(请参阅

我有一个芹菜任务,里面有一个finally子句。我发现有时该条款不起作用。我认为当任务超时时会发生这种情况,看起来芹菜会杀死它

让代码在芹菜任务之后执行的最佳实践是什么?不管是什么

这对任务成功不起作用,但我可以使用现有的finally语句来实现这一点,如果对超时也起作用的话,只需在\u failure中调用清理代码即可。清理代码是幂等的

我考虑过使用一个链来执行一个新任务,该任务将执行清理,但第二个任务只有在第一个任务成功时才会执行

我查看了文档,发现了一个on_failure任务方法(请参阅),我可以克服它——但我不确定它是否在超时时执行


简言之:我需要一种让代码在任务完成后执行的方法——无论是成功、失败还是超时。

如果您担心超时,为什么不捕获SoftTimeLimitExceed

from celery.exceptions import SoftTimeLimitExceeded

@app.task(name='my_task', soft_time_limit=1000, time_limit=2000)
def my_task():
    try:
        do_stuff()
    except SoftTimeLimitExceeded:
        raise
    finally:
        do_some_cleanup.delay()

谢谢,我在这里的文档中找到了-;听起来像是我在找的东西!