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提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
Python通过select实现异步IO的方法
Jun 04 Python
在Django框架中编写Context处理器的方法
Jul 20 Python
Python实现信用卡系统(支持购物、转账、存取钱)
Jun 24 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
Python最小二乘法矩阵
Jan 02 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 Python
在pyCharm中下载第三方库的方法
Apr 18 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
php静态文件生成类实例分析
2015/01/03 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
AngularJS使用angular-formly进行表单验证
2015/12/27 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
用python写asp详细讲解
2013/12/16 Python
python实现百度关键词排名查询
2014/03/30 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
python的turtle库使用详解
2019/05/10 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
Python修改DBF文件指定列
2020/12/19 Python
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
如何提高JDBC的性能
2013/04/30 面试题
思想汇报格式
2014/01/05 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle