七星岩门票,亚洲百米记录,大石桥三高中
作者:kingname
本原:未闻Code
Python 自带一个调度器模块sched
,它能为你实现优先级队列/耽误队列和定时队列。
这个模块的使用非常简洁,首先以耽误队列为例:
import sched
def do_work(name): print(f'你好:{name}')
sch = sched.scheduler()sch.enter(5, 1, do_work, argument=('kingname', ))sch.run()
代码运行以后,会卡在sch.run()
这里,5秒钟以后执行do_work('kingname')
,运行结果如下图所示:
此中,sch.enter()
的第一个参数为耽误的时间,单元单子为秒,第二个参数为优先级,数字越小优先级越高。当两个任务同时要执行时,优先级高的先执行。但必要注意的是,如果你这样写:
import sched
def do_work(name): print(f'你好:{name}')
sch = sched.scheduler()sch.enter(5, 2, do_work, argument=('产物司理', ))sch.enter(5, 1, do_work, argument=('kingname', ))sch.run()
那么先打印出来的是你好:产物司理
,如下图所示:
为什么这里优先级失效了?1的优先级大于2,应该先运行下面的才对啊。
这是由于,只有当两个任务同时运行的时候,才会去搜检优先级。如果两个任务触发的时间一前一后,那么还轮不到对照优先级。
由于耽误队列的耽误
是相对于当前运行这一行代码的时间来较量的,后一行代码比前一行代码晚了几毫秒,所以现实上产物司理这一行会先到时间,所以就会先运行。
为了使用绝对的正确时间,我们能够使用另外一个方法:
import schedimport timeimport datetime
def do_work(name): print(f'你好:{name}')
sch = sched.scheduler(time.time, time.sleep)start_time = datetime.datetime.now() + datetime.timedelta(seconds=10)start_time_ts = start_time.timestamp()sch.enterabs(start_time_ts, 2, do_work, argument=('产物司理', ))sch.enterabs(start_time_ts, 1, do_work, argument=('kingname', ))sch.run()
运行结果如下图所示:
sch.enterabs()
的第一个参数是任务起头时间的时间戳,这是一个绝对时间,这个时间能够使用datetime模块来天生,或者其他你熟悉的方式。后面的参数和sch.enter()
完全一样。
如果你要运行的函数带有多个参数或者默认参数,那么能够使用下面的方式传入参数:
本文地址:http://www.wbwb.net/bianchengyuyan/207501.html 转载请注明出处!