gpt4 book ai didi

python - Celery 任务的finally 子句不执行,我该如何清理?

转载 作者:行者123 更新时间:2023-12-01 07:39:35 26 4
gpt4 key购买 nike

我有一个 celery 任务,其中有一个 finally 子句。我发现有时该子句不会执行。我认为当任务超时时就会发生这种情况,看起来 celery 杀死了它。

无论如何,在 celery 任务之后执行代码的最佳实践是什么?

这对任务成功不起作用,但我可以使用现有的finally语句来实现这一点,并且如果它也适用于超时,则只需调用on_failure中的清理代码即可。清理代码是幂等的。

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

我浏览了文档并找到了一个 on_failure 任务方法(参见 https://gist.github.com/darklow/c70a8d1147f05be877c3 )我可以超越 - 但我无法确定它是否会在超时时执行?

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

最佳答案

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

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()

关于python - Celery 任务的finally 子句不执行,我该如何清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56798248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com