Python定时任务APScheduler安装及使用解析


Posted in Python onAugust 07, 2020

1、简介

APScheduler是一个 Python 定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及 crontab 类型的任务,并且可以持久化任务、并以 daemon 方式运行应用。

2、APScheduler四个组件

APScheduler 四个组件分别为:触发器(trigger),作业存储(job store),执行器(executor),调度器(scheduler)。

触发器(trigger)

包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了他们自己初始配置意外,触发器完全是无状态的

APScheduler 有三种内建的 trigger:

  • date: 特定的时间点触发
  • interval: 固定时间间隔触发
  • cron: 在特定时间周期性地触发

作业存储(job store)

存储被调度的作业,默认的作业存储是简单地把作业保存在内存中,其他的作业存储是将作业保存在数据库中。一个作业的数据讲在保存在持久化作业存储时被序列化,并在加载时被反序列化。调度器不能分享同一个作业存储。
APScheduler 默认使用 MemoryJobStore,可以修改使用 DB 存储方案

执行器(executor)

处理作业的运行,他们通常通过在作业中提交制定的可调用对象到一个线程或者进城池来进行。当作业完成时,执行器将会通知调度器。

最常用的 executor 有两种:

  • ProcessPoolExecutor
  • ThreadPoolExecutor

调度器(scheduler)

通常在应用中只有一个调度器,应用的开发者通常不会直接处理作业存储、调度器和触发器,相反,调度器提供了处理这些的合适的接口。配置作业存储和执行器可以在调度器中完成,例如添加、修改和移除作业

2、安装

$ pip install apscheduler

接下来我们看下简单的几个示例:

===============interval: 固定时间间隔触发===============
from apscheduler.schedulers.blocking import BlockingScheduler
from datetime import datetime

def job():
  print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# 定义BlockingScheduler
sched = BlockingScheduler()
sched.add_job(job, 'interval', seconds=5) 
sched.start()
===============cron: 特定时间周期性地触发===============
import time
from apscheduler.schedulers.blocking import BlockingScheduler

def job(text):
  t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
  print('{} --- {}'.format(text, t))

scheduler = BlockingScheduler()
# 在每天22点,每隔 1分钟 运行一次 job 方法
scheduler.add_job(job, 'cron', hour=17, minute='*/1', args=['job1'])
# 在每天22和23点的25分,运行一次 job 方法
scheduler.add_job(job, 'cron', hour='22-23', minute='25', args=['job2'])

scheduler.start()

通过装饰器scheduled_job()添加方法

import time
from apscheduler.schedulers.blocking import BlockingScheduler

scheduler = BlockingScheduler()

@scheduler.scheduled_job('interval', seconds=5)
def job1():
  t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
  print('job1 --- {}'.format(t))

@scheduler.scheduled_job('cron', second='*/7')
def job2():
  t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
  print('job2 --- {}'.format(t))

scheduler.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python基于time模块求程序运行时间的方法
Sep 18 Python
用Python实现KNN分类算法
Dec 22 Python
python方法生成txt标签文件的实例代码
May 10 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
python网络应用开发知识点浅析
May 28 Python
Python数据分析模块pandas用法详解
Sep 04 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
python 实现分组求和与分组累加求和代码
May 18 Python
pandas按照列的值排序(某一列或者多列)
Dec 13 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
Python如何解除一个装饰器
Aug 07 #Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 #Python
Python实现上下文管理器的方法
Aug 07 #Python
Python 读取位于包中的数据文件
Aug 07 #Python
Python如何绘制日历图和热力图
Aug 07 #Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 #Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
Aug 07 #Python
You might like
php数组中删除元素的实现代码
2012/06/22 PHP
php随机输出名人名言的代码
2012/10/07 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
PHP错误机制知识汇总
2016/03/24 PHP
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
js中new一个对象的过程
2017/02/20 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
Python实现的建造者模式示例
2018/08/06 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python如何将函数值赋给变量
2020/04/28 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
如何利用python生成MD5并去重
2020/12/07 Python
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
儿科主治医生个人求职信
2013/09/23 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书