使用sched模块在给定时间运行

时间:2011-12-06 13:57:19

标签: python scheduled-tasks

我正在处理需要在两个给定时间之间运行的python脚本。我需要在sched模块中使用构建,因为这个脚本需要能够在任何具有python 2.7的机器上直接运行,以减少配置时间。 (所以CRON不是一个选项)

一些变量定义了运行时间的设置,此处set_timer_start=0600set_timer_end=0900写在HHMM中。我能够在合适的时间停止剧本。

我不知道sched究竟是如何工作的(python doc页面对我来说没什么意义),但据我所知,它运行的日期/时间(epoch)而我只希望它在给定时间(HHMM)运行。

任何人都可以给我一个关于如何使用调度程序的示例(或链接),并可能计算下一个运行日期/时间吗?

1 个答案:

答案 0 :(得分:11)

如果我的要求是正确的,那么你需要的可能就是一个循环,它会在每次执行时重新进入队列中的任务。有点像:

# This code assumes you have created a function called "func" 
# that returns the time at which the next execution should happen.
s = sched.scheduler(time.time, time.sleep)
while True:
    if not s.queue():  # Return True if there are no events scheduled
        time_next_run = func()
        s.enterabs(time_next_run, 1, <task_to_schedule_here>, <args_for_the_task>)
    else:
        time.sleep(1800)  # Minimum interval between task executions

然而,使用调度程序是 - IMO - 过度使用。使用datetime对象就足够了,例如基本实现看起来像:

from datetime import datetime as dt
while True:
    if dt.now().hour in range(start, stop):  #start, stop are integers (eg: 6, 9)
        # call to your scheduled task goes here
        time.sleep(60)  # Minimum interval between task executions
    else:
        time.sleep(10)  # The else clause is not necessary but would prevent the program to keep the CPU busy.

HTH!