在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(),只需安排其他工作并使用主循环调用它即可。您唯一需要更改的代码就是删除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)

关于python - 安排任务在特定时间开始每n秒运行一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43429460/

10-11 22:36