如何重新调度未运行超过10分钟的任务?

1 投票
2 回答
753 浏览
提问于 2025-04-17 04:33

我有一个任务叫做:recursive_task,它会安排自己在5秒后再次执行。但是如果这个任务因为某种原因崩溃了,就需要重新运行它。

我几乎考虑到了所有可能的情况,但谁也不知道未来会发生什么。

我最开始创建了一个重复的任务:manage_tasks,它会检查recursive_task的状态,看看它是否很久没有运行,以及是否成功完成了,但这样做感觉不太对。那么你会怎么解决这个问题呢?

2 个回答

0

我建议你看看Python的信号功能:

http://docs.python.org/library/signal.html

import signal

# Set the signal handler and an alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(900) # 15 miutes
# some_function()

signal.alarm(0)          # Disable the alarm

这里:

def handler(signum, frame):
    # do something
    sys.exit(1)

通过信号,你可以设置一个处理程序,在你想要的任何时候执行。这样,你就可以很简单地通过这个处理程序重新运行你的脚本。

1

试试设置 CELERY_ACKS_LATE,这样任务消息会在任务执行完之后才被确认。这样一来,你可能会更容易重新运行你的任务。

撰写回答