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使用urllib2实现发送带cookie的请求
Apr 28 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
详解python中字典的循环遍历的两种方式
Feb 07 Python
Python实现单词翻译功能
Jun 06 Python
快速查询Python文档方法分享
Dec 27 Python
使用PyCharm创建Django项目及基本配置详解
Oct 24 Python
python 命令行传入参数实现解析
Aug 30 Python
Python jieba库用法及实例解析
Nov 04 Python
python基于TCP实现的文件下载器功能案例
Dec 10 Python
Python实现转换图片背景颜色代码
Apr 30 Python
Python字符串格式化f-string多种功能实现
May 07 Python
python openCV自制绘画板
Oct 27 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
use jscript List Installed Software
2007/06/11 Javascript
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
Angularjs中ng-repeat-start与ng-repeat-end的用法实例介绍
2016/12/31 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
python的文件操作方法汇总
2017/11/10 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python3 log10()函数简单用法
2019/02/19 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
Python对excel的基本操作方法
2021/02/18 Python
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
初婚初育证明
2014/01/14 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
小学班级口号
2014/06/09 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers