python定时任务实践

背影
由于程序需求,监测配置变化需要设置定时任务,每分钟执行一次,对任务持久化要求不高,不需要时可以关闭定时任务
定时任务库对比根据上面需求,我找到几个库来实现
schedule:python job scheduling for humans. 轻量级,无需配置的作业调度库
apscheduler:一个高级的 python 任务调度库
celery:是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具, 也可用于任务调度
基于我们的需求,我们只需要轻量级的库就可以,我们选用schedule库
直接使用 pip install schedule进行安装使用
import scheduleimport time# 定义你要周期运行的函数def job(): print(i'm working...)schedule.every(10).minutes.do(job) # 每隔 10 分钟运行一次 job 函数schedule.every().hour.do(job) # 每隔 1 小时运行一次 job 函数schedule.every().day.at(10:30).do(job) # 每天在 10:30 时间点运行 job 函数schedule.every().monday.do(job) # 每周一 运行一次 job 函数schedule.every().wednesday.at(13:15).do(job) # 每周三 13:15 时间点运行 job 函数schedule.every().minute.at(:17).do(job) # 每分钟的 17 秒时间点运行 job 函数while true: schedule.run_pending() # 运行所有可以运行的任务 time.sleep(1)上述是简单的使用示例,我们需求定时分钟级就用schedule.every(1).minutes.do(job) 就可以,但是定时任务执行后会占用线程,那么运行后我们的程序会卡,schedule 是阻塞式的,默认情况下, schedule 按顺序执行所有的作业,不能达到并行执行任务,我们使用多线程来解决。
可看到有三个类canceljob、scheduler、job
canceljobclass canceljob(object): pass可以看到这是一个空类,这个类的作用是当job执行函数返回一个canceljob类型的对象时,执行完之后就会被schedule移除,简单说就是只会执行一次。
其它源码可以自行查看学习。
items =schedule.get_jobs() #调用这个可以显示所有定时任务,括号内可以加特定的tag,只显示特定的任务print(items)for item in items: item=str(item) self.tree1.insert('',0,values=[item])我们使用这个来作为任务管理界面显示所有定时任务。
那么定时任务怎么取消呢?
# 通过 tag 函数给它们添加唯一标识符进行分组,取消时通过标识符进行取消相应组的任务def greet(name): print('hello {}'.format(name))schedule.every().day.do(greet, 'andrea').tag('daily-tasks', 'friend')schedule.every().hour.do(greet, 'john').tag('hourly-tasks', 'friend')schedule.every().hour.do(greet, 'monica').tag('hourly-tasks', 'customer')schedule.every().day.do(greet, 'derek').tag('daily-tasks', 'guest')schedule.clear('daily-tasks')schedule取消定时任务,通过tag来进行标识,这样就能实现简单的定时任务管理与删除。
其实我们也可以使用循环来实现重复执行函数加上time.sleep()来实现定时执行,循环里加个条件,满足条件就break跳出,这样也能实现定时暂停。

有什么半入耳降噪蓝牙耳机?半入耳降噪蓝牙耳机推荐
边缘计算是一种使计算和数据存储更接近所需位置的范例
东芝已开始采用其首个UFS 3.0存储解决方案
IHS:长距离光通讯销售呈13%速度增长
RFID智能包装行业前景广阔 未来市场规模有望达2000亿
python定时任务实践
5分钟充满一半 华为超级石墨稀电池真的来了吗
360手机N5S和小米5哪个好?买手机不再迷惘,资深玩家帮你分析
前驱体粒度分布对煅烧产品形貌的影响
NETGEAR重拳出击AV领域 4K60无延时IP网络化方案发布
高度集成的PWM控制集成电路电源管理芯片U2281概述
小米已无心与华为鏖战手机市场,IOT成为它的新风口?
哪些方面的原因阻碍了VR成为市场的主流
多通道多路复用器件监测电力线监控精度
指针式万用表的测量功能有哪些(指针式万用表的基本工作原理)
__AMT\-FB301多参数水质监测浮标系统
目前最安全打开U盘的技巧你会吗?
VR时代的游戏世界:一年后的AR与VR将会发生的几个变化
8V~150V降压芯片,48V转12V电源芯片
索尼最新的旗舰相机是他们迄今为止最先进的无反光镜相机