调度任务每隔n秒运行一次,从特定时间开始

时间:2017-04-15 18:01:52

标签: python time scheduled-tasks schedule

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

1 个答案:

答案 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)