WHCSRL 技术网

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

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

【阅读全文】

file

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

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

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

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

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

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

编写一个任务用于执行。

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

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

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

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

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

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

file

【往期精彩】

● 不用再使用命令行打包成exe,有人写出了UI应用,可视化UI界面对python程序进行打包的方法!

● 发现一个秘密:既python3.6之后字典竟然变成了有序集合,我再次验证了一下!

● 大厂校招白菜打包价40W+,可高兴坏了房东大妈...

● 这么多的内置函数能记住吗?对python的68个内置函数分类总结!

● 必须要会的文件操作对象File,python文件读写操作利器!

● 你不知道的CS模式的进程管理工具,状态监测、项目启停一目了然!

● 如何将一个python应用以docker镜像的方式来运行?

● python-celery专注于实现分布式异步任务处理、任务调度的插件!

● python远程服务操作工具:fabric,远程命令、本地命令、服务器操作利器!

● python超赞插件you-get,执行一行命令即可下载、命令行下载工具推荐!

● 办公自动化:Python-win32com自动将word文档转换成pdf格式!

● Git LFS 3.0.0 发布,对大文件进行版本控制的 Git 扩展

推荐阅读