加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

python延迟运行事件 重叠事件 优先级和取消是啥样的

发布时间:2023-09-01 11:23:39 所属栏目:语言 来源:
导读:关于“python延迟运行事件、重叠事件、优先级和取消是怎样”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学

关于“python延迟运行事件、重叠事件、优先级和取消是怎样”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。

一、延迟运行事件

在一个延迟或规定时间之后执行事件,需要采用enter()方法,参数如下:

间隔时间 ( 具体值决定与delayfunc,这里为秒 )

优先级 ( 两个事件在同一时间到达时,先执行哪一个 )

调用的函数

函数参数

import sched

import time

# 生成调度器

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

def print_event(name):

print ('EVENT:', time.time(), name)

print ('START:', time.time())

# 分别设置在执行后2秒、3秒之后执行调用函数

scheduler.enter(2, 1, print_event, ('first',))

scheduler.enter(3, 1, print_event, ('second',))

# 运行调度器

scheduler.run()

# 输出结果

# START: 1532050215.3737717

# EVENT: 1532050217.3747234 first

# EVENT: 1532050218.375626 second

二、重叠事件

调用 run() 块执行所有的事件

每个事件都在同一线程中运行,所以如果一个事件需要更长的时间,延迟事件将会有重叠。

为了不丢失事件,延迟事件将会在之前事件运行完再被执行

但一些延迟事件可能会晚于原本计划的事件

import sched

import time

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

def long_event(name):

print('BEGIN EVENT :', time.time(), name)

time.sleep(2)

print('FINISH EVENT:', time.time(), name)

print('START:', time.time())

scheduler.enter(2, 1, long_event, ('first',))

# 事件无法在设想的3秒后执行,将会顺延执行

scheduler.enter(3, 1, long_event, ('second',))

scheduler.run()

# 输出结果

# START: 1532051082.8237524

# BEGIN EVENT : 1532051084.8392828 first

# FINISH EVENT: 1532051086.8475456 first

# BEGIN EVENT : 1532051086.8475456 second

# FINISH EVENT: 1532051088.8557353 second

三、事件优先级

如果多个事件是同一时间执行,通过设置他们的优先级值,用于确定顺序运行

import sched

import time

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

def print_event(name):

print('EVENT:', time.time(), name)

now = time.time()

print('START:', now)

scheduler.enterabs(now+2, 2, print_event, ('first',))

scheduler.enterabs(now+2, 1, print_event, ('second',))

scheduler.run()

# 输出结果

# START: 1532052567.6057265

# EVENT: 1532052569.621258 second

# EVENT: 1532052569.621258 first

四、取消事件

利用enter()和enterabs()返回一个引用事件用来取消它

import sched

import threading

import time

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

# 建立一个全局 线程计数器

counter = 0

def increment_counter(name):

global counter

print('EVENT:', time.time(), name)

counter += 1

print('NOW:', counter)

print('START:', time.time())

e1 = scheduler.enter(2, 1, increment_counter, ('E1',))

e2 = scheduler.enter(3, 1, increment_counter, ('E2',))

# 开始一个线程执行事件

t = threading.Thread(target=scheduler.run)

t.start()

# 在主线程,取消第一个预定事件

scheduler.cancel(e1)

# 等待线程调度程序完成运行

t.join()

# 输出结果

# START: 1532053265.5280123

# EVENT: 1532053268.528813 E2

# NOW: 1

五、其他方法

# 判断队列是否为空

scheduler.empty()

# 只读属性,返回一个即将到达的事件列表(按到达事件排序),每个事件都是有 time 、 priority 、 action 、 argument 组成的 namedtuple

scheduler.queue

关于“python延迟运行事件、重叠事件、优先级和取消是怎样”的内容今天就到这,感谢各位的阅读,大家可以动手实际看看,对大家加深理解更有帮助哦。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章