【发布时间】:2019-06-20 15:46:06
【问题描述】:
我正在尝试创建一个基于时间触发多个脚本的调度程序。例如,我有脚本 A、B 和 C,我想触发 A-每 1 分钟,B-每 2 分钟触发一次,C-每 3 分钟触发一次。现在,我只是想让它们打印在屏幕上。
我从 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 分钟触发
从 print_time 164003 3 分钟触发
结束时间:164003
预期输出:
1 分钟触发器应该每分钟触发一次
2 分钟触发应该每两分钟触发一次,以此类推。
【问题讨论】:
标签: python python-3.x