在Python中使用schedule包时,我想安排一个任务在特定时间启动,然后每10秒运行一次。我能够使用schedule.every(10).seconds.do(x)
每隔10秒运行一次任务,并且还使用schedule.every().day.at('13:25').do(x)
让它在设定的时间运行。但是我怎么把这些放在一起呢?我试着将它们组合成以下内容,但我得到了RecursionError: maximum recursion depth exceeded
import schedule
import time
def test():
print('Hello, World!')
def sched_job():
schedule.every(10).seconds.do(test)
while True:
schedule.run_pending()
time.sleep(1)
schedule.every().day.at('13:56').do(sched_job)
while True:
schedule.run_pending()
time.sleep(1)
sched_job()
答案 0 :(得分:1)
不要从你的工作中调用run_pending()
,只需安排一个额外的工作并使用你的主循环来调用它。您需要更改代码的唯一方法是删除while True
中的sched_job()
块。此外,为了防止在给定时间第二天每隔10秒创建第二个计划,外部作业应该在执行一次后立即取消。您可以返回schedule.CancelJob
。
以下是修改后的代码:
import schedule
import time
def test():
print('Hello, World!')
def sched_job():
schedule.every(10).seconds.do(test)
return schedule.CancelJob
schedule.every().day.at('13:56').do(sched_job)
while True:
schedule.run_pending()
time.sleep(1)