sched 模块中巨好用的轻量级定时任务神器scheduler

转载自https://zhuanlan.zhihu.com/p/428289865

 

Python 提供有一个强大的、可用来定义执行任务调度的 sched 模块,该模块中含有一个 scheduler 类,可用来执行更复杂的任务调度。

 

【阅读全文】

 

 

这种定时调度任务的实现还是比较简单的,总体来说只需要编写好定时任务最好使用标准范式来使得任务运行起来。

首先,需要导入三个模块的扩展库。主要是为了两个方面,一个是为了记录时间或者日期准备的,另一个则是为了执行编写好的任务。

 

import sched # 定时任务模块
import time # 时间模块
from datetime import datetime # 日期时间模块

 

接下来主要看一下执行定时任务的函数,就是通过这个函数最后将定时任务可以调度起来执行的,看一下这个调度函数的组成部分。

 

'''
初始化scheduler类对象
time.time 可以返回时间戳的函数
time.sleep 实现运行阻塞等待
用time模块的这两个函数来实例化scheduler对象
'''
schedule = sched.scheduler(time.time, time.sleep)
 

 

第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。

 

编写一个任务用于执行。

 

 1 def work(cycle):
 2     '''
 3     定义需要执行的工作任务
 4     :param cycle: 时间周期,单位:秒
 5     :return:
 6     '''
 7     print('当前执行时间:',datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
 8     # 将任务函数加到定时任务中
 9     schedule.enter(cycle, 0, work, (cycle,))
10     print('任务执行状态:', 'success')
11  

 

函数介绍:enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数。

 

最后,编写调起上述任务的触发函数,通过触发上面已经写好的定时任务来完成定时任务的执行。

 

1 def exec_work(cycle=10):
2     # 添加触发函数
3     schedule.enter(0, 0, work, (cycle,))
4     # 启动任务
5     schedule.run()

 

 

再通过main的函数入口执行exec_work函数,这样一个定时任务的调度就算完成了。

 

if __name__ == '__main__':
    exec_work(1)

 

posted @ 2023-01-31 10:17  锦绣良缘  阅读(142)  评论(0)    收藏  举报