按时间间隔连续安排脚本

时间:2019-06-20 15:46:06

标签: python python-3.x

我正在尝试创建一个调度程序,该调度程序可根据时间触发多个脚本。例如,我有脚本A,B和C,我想每1分钟触发一次A,每2分钟触发一次B,每3分钟触发一次C。现在,我只是试图将它们打印在屏幕上。

我从Python获得了Sched模块,并尝试使用它。不幸的是,触发器无法按预期工作。修改后,它要么连续工作,要么不触发正确的脚本,或者仅触发一次所有三个脚本并退出流程。

仅触发一次的代码:

import sched, time
from datetime import datetime

s = sched.scheduler(time.time, time.sleep)
def print_time(a='default'):
    print("From print_time", datetime.now().strftime("%H%M%S"), a)

def print_some_times():
    print("Start time :"+datetime.now().strftime("%H%M%S"))
    s.enter(18, 1, print_time, kwargs={'a': '3 Minutes Trigger'})
    s.enter(12, 1, print_time, kwargs={'a': '2 Minutes Trigger'})
    s.enter(6, 1, print_time, kwargs={'a': '1 Minute Trigger'})
    s.enter(6, 1, print_time, kwargs={'a': '1 Minute Trigger'})
    s.run()
    print("End time :"+datetime.now().strftime("%H%M%S"))

print_some_times()

连续但不正确触发的代码:

import sched, time
from datetime import datetime

s = sched.scheduler(time.time, time.sleep)
def print_time(a='default'): 
    s.enter(5, 1, print_time, ())  
    print("From print_time "+datetime.now().strftime("%H%M%S")+a)

def print_some_times():
    print("Start time :"+datetime.now().strftime("%H%M%S"))
    s.enter(18, 1, print_time, kwargs={'a': ' 3 Minutes Trigger'})
    s.enter(12, 1, print_time, kwargs={'a': '  2 Minutes Trigger'})
    s.enter(6, 1, print_time, kwargs={'a': '  1 Minute Trigger'})
    s.enter(6, 1, print_time, kwargs={'a': '  1 Minute Trigger'})       
    s.run()
    print("End time :"+datetime.now().strftime("%H%M%S"))

print_some_times()

注意:我已经删除了Enter的时间0值,这样我们就不必等待很长时间了。

带有第一个代码的实际结果:
开始时间:163945
来自print_time 163951 1分钟触发器
来自print_time 163951 1分钟触发器
来自print_time 163957 2分钟触发器
From print_time 164003 3分钟触发
结束时间:164003

预期输出:
1分钟触发应每1分钟触发一次
2分钟触发应每两分钟触发一次,依此类推。

1 个答案:

答案 0 :(得分:1)

sched模块不是为此设计的。

您可以尝试使用this schedule library

使用python3 -m pip install schedule

安装
import schedule
import time
from datetime import datetime


def print_time(a='default'):
    print("From print_time " + datetime.now().strftime("%H%M%S") + a)


def print_some_times():
    print("Start time :" + datetime.now().strftime("%H%M%S"))
    schedule.every(3).minutes.do(print_time, a='  3 Minutes Trigger')
    schedule.every(2).minutes.do(print_time, a='  2 Minutes Trigger')
    schedule.every(1).minutes.do(print_time, a='  1 Minute Trigger')
    schedule.every(1).minutes.do(print_time, a='  1 Minute Trigger')
    print("End time :" + datetime.now().strftime("%H%M%S"))


print_some_times()

while 1:
    schedule.run_pending()
    time.sleep(1)