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 strip lstrip rstrip使用方法
Sep 06 Python
python实现倒计时的示例
Feb 14 Python
python中将字典转换成其json字符串
Jul 16 Python
Python的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
python实现简单socket通信的方法
Apr 19 Python
Python实现识别手写数字大纲
Jan 29 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
python清除函数占用的内存方法
Jun 25 Python
用Python写一个自动木马程序
Sep 17 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 Python
在 Python 中利用 Pool 进行多线程
Apr 24 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
PHP5 的对象赋值机制介绍
2011/08/02 PHP
比较详细PHP生成静态页面教程
2012/01/10 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
JavaScript 格式字符串的应用
2010/03/29 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
python进阶教程之动态类型详解
2014/08/30 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
python中abs&map&reduce简介
2018/02/20 Python
浅谈python之新式类
2018/08/12 Python
python requests使用socks5的例子
2019/07/25 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
python如何进入交互模式
2020/07/06 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
优秀信贷员先进事迹
2014/01/31 职场文书
网络管理专业求职信
2014/03/15 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
储备店长岗位职责
2015/04/14 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
《海上日出》教学反思
2016/02/23 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Nginx反向代理、重定向
2022/04/13 Servers