如何重新调度未运行超过10分钟的任务?
我有一个任务叫做: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,这样任务消息会在任务执行完之后才被确认。这样一来,你可能会更容易重新运行你的任务。