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操作sqlite的CRUD实例分析
May 08 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
解决python3 网络请求路径包含中文的问题
May 10 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
浅述python2与python3的简单区别
Sep 19 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
python开发游戏的前期准备
May 05 Python
python3中rank函数的用法
Nov 27 Python
appium+python adb常用命令分享
Mar 06 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
Python Excel vlookup函数实现过程解析
Jun 22 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
JavaScript实现图片轮播的方法
2015/07/31 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python class的继承方法代码实例
2020/02/14 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
高三高考决心书
2014/03/11 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
优秀求职信
2014/05/29 职场文书
2015毕业寄语大全
2015/02/26 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书