Python 常用的模块和库
一、sched
1.1 sched介绍
-
使用介绍
sched
是python
自带一个调度器模块 ,它能为你实现优先级队列/延迟队列和定时队列
1.2 sched实现队列
-
实现一个延时队列
def work(arg): print(f'开始执行{arg}') if __name__ == '__main__': sch = sched.scheduler() # 5s后执行,优先级为1,参数为'1' sch.enter(5, 1, work, argument=('1',)) # 开始执行,5s后执行 sch.run()
-
实现一个优先级队列
只有当两个任务同时运行的时候,才会去检查优先级。如果两个任务触发的时间一前一后,那么还轮不到比较优先级。由于延迟队列的
延迟
是相对于当前运行这一行代码的时间来计算的,后一行代码比前一行代码晚了几毫秒,所以实际上产品经理这一行会先到时间,所以就会先运行import time import sched import datetime def work(arg): print(f'开始执行{arg}') if __name__ == '__main__': sch = sched.scheduler(time.time, time.sleep) start_time = datetime.datetime.now() + datetime.timedelta(seconds=10) # 为了使时间相同,此处使用绝对精确的时间 timestamp = test_time.timestamp() # enterabs() 第一个参数是任务开始时间的时间戳,这是一个绝对时间 sch.enterabs(time_stamp, 1, work, argument=('aaa',)) sch.enterabs(time_stamp, 2, work, argument=('bbb',)) sch.run()
-
传递多个参数
import sched import time import datetime def do_work(name, place, work='写代码'): print(f'你好:{name},你在:{place}{work}') sch = sched.scheduler(time.time, time.sleep) start_time = datetime.datetime.now() + datetime.timedelta(seconds=10) start_time_ts = start_time.timestamp() sch.enter(5, 2, do_work, argument=('产品经理', '杭州'), kwargs={'work': '写需求文档'}) sch.enterabs(start_time_ts, 1, do_work, argument=('kingname', '产品经理旁边'), kwargs={'work': '看着她'}) sch.run()