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

Scheduling task to run every n seconds, starting at a specific time

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

不要从你的工作中调用 run_pending(),只需安排一个额外的工作并使用你的主循环来调用它。您唯一需要更改代码的是删除 sched_job() 中的 while True 块。此外,为了防止在给定时间在第二天每 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)