我正在尝试创建一个调度程序,该调度程序可根据时间触发多个脚本。例如,我有脚本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分钟触发应每两分钟触发一次,依此类推。
答案 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)