APScheduler (advanceded python scheduler)
特点:
1.不依赖于Linux系统的crontab系统定时,独立运行
2.可以动态添加新的定时任务,如
下单后30分钟内必须支付,否则取消订单,就可以借助此工具(每下一单就要添加此订单的定时任务)
3.对添加的定时任务可以做持久保存

基础概念
触发器(trigger)和保存调度逻辑.
作业存储(job store),默认存储在内存中,也可以保存在数据库中(使用序列化和反序列化实现)
执行器(executor)控制执行的作业
调度器(scheduler)包含以上三者
选择合适的调度器,存储,执行和触发器

名称 描述
BlockingScheduler 当在进程中使用时
BackgroundScheduler 后台运行,不影响当前系统
AsyncIOScheduler async module
GeventScheduler gevent
TornadoScheduler Tornado
TwistedScheduler Twister
QtScheduler Qt

选择合适的作业存储
默认作业存储(MemoryJobStore),宕机会丢失作业
数据库(Mongo SQLAlchemy JobStore),宕机后仍然保留作业
选择合适的执行器
(ThreadPoolExecutor)默认的执行器,多线程
(ProcessPoolExecutor)多进程
选择合适的触发器

名称 描述
date 作业执行一次,指定时间
interval 间隔执行,多次
cron 和linuxcrontab格式兼容

触发器一般参数

参数 描述
job_function 调用的函数
trigger 触发类型

date触发器

参数 描述
run_date 作业运行的时间
timezone 时区

interval触发器

参数 描述
weeks(int) 间隔周数
days(int) 间隔天数
hours(int) 间隔小时
minutes(int) 间隔分钟
seconds(int) 间隔秒数
start_date(datetime|str) 开始日期
end_date(datetime|str) 结束日期
timezone(datetime|str) 时区

cron触发器

参数 描述
year(int str)
month (int|str) 月 (范围1-12)
day (int|str) 日 (范围1-31)
week (int|str) 周 (范围1-53)
day_of_week (int|str) 周内第几天或者星期几 (范围0-6 或者 mon,tue,wed,thu,fri,sat,sun)
hour (int|str) 时 (范围0-23)
minute (int|str) 分 (范围0-59)
second (int|str) 秒 (范围0-59)
start_date (datetime|str) 最早开始日期(包含)
end_date (datetime|str) 最晚结束时间(包含)
timezone (datetime.tzinfo|str) 指定时区

取值格式

表达式 参数 描述
* any 每个值触发发
*/a any 每个间隔值出发, 并从最小的值出发
a-b 范围内每个值出发
a-b/c 在a-b之间的间隔c值出发
xth y day 在每月x周的y天触发
last x day 在每月的x周触发
last day 在每月的x天触发
x,y,z day Fire on any matching expression; can combine any number of any of the above expressions

例子
second=“5”|每分钟第5秒执行一次
second=“1,3,5”|每分钟1,3,5秒执行一次
second="*"|每秒执行一次
second=“5/2”|每分钟的第5秒开始,间隔两2秒执行一次
second=“5-10/2”|每分钟的第5-10秒,间隔2秒执行一次

contab格式说明
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command

其中:

minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:
星号():代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):表示并列,例如,“1,2,5,7,8,9”
中杠(-):表示整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如
/10,如果用在minute字段,表示每十分钟执行一次。

操作

from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()

1.添加作业

sched.add_job(my_job1, 'interval', seconds=5,id='my_job1')
sched.start()

也可以通过装饰器的形式来实现

@sched.scheduled_job('cron',second='*/5',id='my_job2')
sched.start()

2.作业删除,暂停,恢复

job.remove()
sched.remove_job('my_job_id')
Job.pause()
sched.pause_job()
Job.resume()
sched.resume_job()

3.作业更新

job.modify(max_instances=6, name='Alternate name')

4.获得job列表

sched.get_job(job_id='123')
job.get_jobs()

5.关闭调度器

sched.shutdown()
sched.shutdown(wait=False)

实例

apscheduler添加任务的时候都是并发执行的,但是有些任务并发可能冲突,或者几个任务要先后执行。这个时候就要对这些任务先进行一次封装。

from apscheduler.schedulers.blocking import BlockingScheduler
def job1():print("job1")
def job2():print("job2")def all():job1()job2()hour = 9
minute = 10
sched = BlockingScheduler()
sched.add_job(all(),'cron',hour = hour,minute=minute)

参考文献:
http://apscheduler.readthedocs.io/en/latest/py-modindex.html
https://www.cnblogs.com/luxiaojun/p/6567132.html
http://www.jb51.net/article/117989.htm
http://jinbitou.net/2016/12/19/2263.html
https://www.cnblogs.com/intval/p/5763929.html

apscheduler相关推荐

  1. 47 APScheduler安装及基本概念

    APScheduler的安装 安装APScheduler模块非常简单,没有pip工具的可以下载安装包,使用方法二安装. 方法一:pip install apscheduler 方法二:解压按章包后,执 ...

  2. 46 定时任务模块APScheduler

    APScheduler使用起来十分方便,其提供了基于日期.固定时间间隔及crontab类型的任务,我们可以在主程序的运行过程中快速增加新作业或删除旧作业.如果把作业存储在数据库中,那么作业的状态会被保 ...

  3. python四大软件-Python实用模块(二十)Apscheduler

    软硬件环境 windows 10 64bits anaconda with python 3.7 视频看这里 前言 说起定时任务,第一反应应该是windows自带的计划任务或者linux自带的cron ...

  4. python利器怎么编程-Python任务调度利器之APScheduler详解

    任务调度应用场景 所谓的任务调度是指安排任务的执行计划,即何时执行,怎么执行等.在现实项目中经常出现它们的身影:特别是数据类项目,比如实时统计每5分钟网站的访问量,就需要每5分钟定时从日志数据分析访问 ...

  5. Python任务调度模块 – APScheduler,Flask-APScheduler实现定时任务

    1.安装 pip install apscheduler 安装完毕 2. 简单任务 首先,来个最简单的例子,看看它的威力. 1 # coding:utf-8 2 from apscheduler.sc ...

  6. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装用来定时任务apscheduler库(图文详解)...

    不多说,直接上干货!  Anaconda2 里 PS C:\Anaconda2\Scripts> PS C:\Anaconda2\Scripts> pip.exe install apsc ...

  7. python 任务计时器 apscheduler.schedulers

    crontab 真的不好用 import pandas as pd import subprocess import os import time from datetime import datet ...

  8. python任务调度框架_python任务调度框架apscheduler【转】

    简介 APScheduler(以下简称APS)框架可以让用户定时执行或者周期性执行Python任务.既可以添加任务也可以删除任务,还可以将任务存储在数据库中.当APS重启之后,还会继续执行之前设置的任 ...

  9. Python 定时任务框架 APScheduler

    Python定时任务:多种实现方法 Python 定时任务框架 APScheduler 详解 APScheduler官方文档 Git-hub examples 例子1:apscheduler.trig ...

  10. APScheduler 浅析

    前言 APScheduler是python下的任务调度框架,全程为Advanced Python Scheduler,是一款轻量级的Python任务调度框架.它允许你像Linux下的Crontab那样 ...

最新文章

  1. Oracle数据库迁移后变慢,迁移数据之后,读取数据库变得很慢
  2. python3怎么读取excel_python3 读取excel
  3. 硬盘盘符无法识别或已损坏,别急着格式化
  4. mysql承受压力_MySQL 压力性能测试(Mysqlslap)工具
  5. 黑马Java学习笔记之-----集合框架
  6. FreeModbus输入寄存器
  7. 经典排序算法 - 堆排序Heap sort
  8. QQ解除外链限制,支持直接跳转淘宝抖音
  9. spark学习-Spark的Map()和FlatMap()函数使用
  10. html页面转换pdf.txt
  11. 54份运算放大器书籍、文档资料合集(54份 0.46G)
  12. WEB开发技术 知识点总结
  13. 《东周列国志》第九十一回 学让国燕哙召兵 伪献地张仪欺楚
  14. MOOC_Python语言程序设计_习题_《沉默的羔羊》文本分析
  15. 万字案例 | 用Python建立客户流失预测模型(含源数据+代码)
  16. what is the different between Grammar and syntax
  17. Get busy living--or get busy dying
  18. shp导入Oracle
  19. 非看不可的实用技巧:在Mac上使用密码保护文件夹!
  20. 全基因组测序数据分析---WGS主流程

热门文章

  1. Vue的router导航重复-报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to curren
  2. python oop编程_23 Python - 面向对象编程OOP
  3. 微课系列(5):Python程序中__name__变量的用法
  4. 详解Python科学计算扩展库numpy中的矩阵运算(1)
  5. Python标准库collections中与字典有关的类
  6. 武汉传媒学院有计算机专业吗,武汉传媒学院比较好的专业有哪些呢?
  7. C++ 整形转换为字符串的方式总结
  8. All Roads Lead to Rome (30)
  9. mysql5启动错误1067_win7 64位 mysql5.5启动服务报错无法启动,错误1067
  10. java 网格布局管理器,Java使用网格组布局管理器