我正在使用python schedule模块在heroku(Hobby Tier)实例上安排一堆(40+)日常重复工作。我将脚本作为入口点运行(在每次计算机重新启动时调用):
if __name__ == "__main__":
schedule.every().day.at(session_time).do(_run_leetcode_session, bot, chat_id, team_name=team_name)
在我安排的约40个工作中,有些似乎没有运行。至。验证我是否运行以下调试脚本:
for job in schedule.jobs:
logging.info(job)
然后我得到以下日志
2020-03-05 23:06:31,606 - root - INFO - Every 1 day at 12:00:00 do _run_leetcode_session(<telegram.bot.Bot object at 0x7f9576039b50>, '-375976592', team_name='?Leetcode Team 100') (last run: 2020-03-05 12:00:01, next run: 2020-03-06 12:00:00)
2020-03-05 23:06:31,606 - root - INFO - Every 1 day at 15:30:00 do _run_leetcode_session(<telegram.bot.Bot object at 0x7f9576039b50>, '-281586101', team_name='?Leetcode Practice 201') (last run: [never], next run: 2020-03-05 15:30:00)
第一行很好,但是日志在第二行显示了意外的行为:
在2020-03-05 23:06:31
处被告知(last run: [never], next run: 2020-03-05 15:30:00)
,实际上该作业不是在2020-03-05 15:30:00
上执行的,现在下一个运行日期已过去。 如何解释?
这是库中的错误吗?机器有问题吗?线程设置有问题吗?
答案 0 :(得分:0)
之所以会发生这种情况,是因为python schedule
模块不会自动处理错误,因此,如果一个作业中断了调度程序中断,则以下所有作业将不会执行。
一种解决方法是使用一种实现来捕获类似SafeScheduler
这样的异常的实现