【问题标题】:Schedule scripts continuously with time intervals以时间间隔连续调度脚本
【发布时间】: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


    【解决方案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)
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多