zoukankan      html  css  js  c++  java
  • python使用sched模块执行周期性任务和定时任务

    执行周期性任务

    sched模块是一个通用的事件调度程序,可以对任务进行延迟调度,基于此,可以用它来实现周期性任务。

    # coding:utf8
    import time
    import sched
    
    
    # 初始化scheduler类
    # 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
    s = sched.scheduler(time.time, time.sleep)
    
    
    # 被周期性调度的任务
    def task():
        print("run time: {}".format(int(time.time())))
    
    
    def perform(inc):
        s.enter(inc, 0, perform, (inc,))
        task()
    
    
    def main(inc=3):
        s.enter(0, 0, perform, (inc,))
        s.run()
    
    
    if __name__ == "__main__":
        main()

    执行结果为:

    >>> run time: 1558716699
    >>> run time: 1558716702
    >>> run time: 1558716705
    >>> run time: 1558716708
    >>> ......

    任务每隔3s执行一次,周期性执行。

    s.enter()方法用来加入调度事件,即将任务加入到队列中,它有四个参数,分别为:间隔时间、优先级(为两个被调度在相同时间执行的函数定序,数字越小,优先级越高)、被调用触发的函数、函数的参数(参数放在元组中,当只有一个参数时,写为(parm,))

    s.run()用来执行队列中的任务。

    执行定时任务

    当单纯执行定时任务时,可以是这样:

    # coding:utf8
    import time
    import sched
    
    
    s = sched.scheduler(time.time, time.sleep)
    
    
    def print_time(task_id):
        print("#{} run time: {}".format(task_id, int(time.time())))
    
    
    def print_some_times():
        print(int(time.time()))
        s.enter(10, 1, print_time, (0,))
        s.enter(5, 2, print_time, (1,))
        s.enter(5, 1, print_time, (2,))
        s.run()
        print(int(time.time()))
    
    
    if __name__ == "__main__":
        print_some_times()

    执行结果为:

    >>> 1558716127
    >>> #2 run time: 1558716132
    >>> #1 run time: 1558716132
    >>> #0 run time: 1558716137
    >>> 1558716137

    可以看到,执行总耗时为10s,执行开始后5s,1号和2号任务同时到达执行时间,由于2号任务的优先级高先执行,后面1号任务执行,10s后,0号任务执行。

  • 相关阅读:
    NPM 使用介绍
    tight
    c# 选择排序
    AssetBundle Manager and Example Scenes
    非常棒的轨迹插件Better Trails v1.4.6
    【模型】Toon Dragon
    unity实现3D物体上的事件监听处理
    Alley Bird 跳跳鸟源码
    Unity性能优化 – 脚本篇
    欧拉角与万向节死锁
  • 原文地址:https://www.cnblogs.com/lucky-heng/p/10921007.html
Copyright © 2011-2022 走看看