【问题标题】:Scheduling task to run every n seconds, starting at a specific time调度任务每隔 n 秒运行一次,从特定时间开始
【发布时间】:2017-09-11 18:30:54
【问题描述】:

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

【问题讨论】:

标签: python time scheduled-tasks schedule


【解决方案1】:

不要从你的工作中调用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)

【讨论】:

  • 我很好奇为什么每个人似乎都使用time.sleep(1) 以便schedule.run.pending() 每秒运行一次。是否需要经常运行?
猜你喜欢
  • 1970-01-01
  • 2019-12-13
  • 2011-03-24
  • 2022-12-11
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2018-07-08
相关资源
最近更新 更多