第十四章:应用构建模块-sched:定时事件调度器-有延迟地运行事件

14.11 sched:定时事件调度器
sched模块实现了一个通用事件调度器,可以在指定时刻运行任务。调度器类使用一个time函数来掌握当前时间,另外利用一个delay函数来等待一个指定时间段。具体的时间单位并不重要,所以接口足够灵活,可以用于很多用途。调用time函数时不带任何参数,并且它会返回一个表示当前时间的数。调用delay函数要提供一个整数参数,使用的单位与time函数相同,返回之前会等待指定数目的事件单位。例如,可以使用time模块的monotonic()和sleep(),不过这一节中的例子使用了time.time()(也满足这些需求),因为这样输出更容易理解。要支持多线程应用,生成各事件之后可以调用delay函数并提供参数0,以确保其他线程也有机会运行。

14.11.1 有延迟地运行事件
可以调度事件在一个延迟之后运行或者在一个指定时间运行。要有延迟地调度事件,可以
使用enter()方法,它有4个参数:
表示延迟的一个数
一个优先级值
一个要调用的函数
函数参数的一个元组
这个例子调度两个不同的事件分别在2秒和3秒后运行。一旦达到事件的时间,便会调用print_event(),打印当前时间和传至事件的name参数。

import sched
import time

scheduler = sched.scheduler(time.time,time.sleep)

def print_event(name,start):
    now = time.time()
    elapsed = int(now - start)
    print('EVENT: {} elapsed={} name={}'.format(
        time.ctime(now),elapsed,name))

start = time.time()
print('START:',time.ctime(start))
scheduler.enter(2,1,print_event,('first',start))
scheduler.enter(3,1,print_event,('second',start))

scheduler.run()

运行这个程序会生成以下输出。
在这里插入图片描述
为第一个事件打印的时间是开始时间(start)后的2秒,第二个事件的时间则为开始时间(start)后的3秒。

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/94652992