在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
Python定时任务框架APScheduler基础知识分享,APScheduler十分方便,课基于日期、固定时间间隔以及crontab类型任务在主程序的运行过程中快速增加新作业或删除旧作业,若把作业存储在数据库中作业的状态会被保存,当调度器重启时不必重新添加作业,作业会恢复原状态继续执行。

一、定时任务框架APScheduler是什么?
在实际开发中会碰到重复性或周期性的任务,如每天定时爬取某个网站的数据、一定周期定时运行代码训练模型等,类似这类的任务通常需要手动来进行设定或调度,以便其能够在设定好的时间内运行。
在Windows上可以通过计划任务来手动实现,而在Linux系统上往往会用到更多关于 crontab 的相关操作。但手动管理并不是一个很好的选择,如果需要有十几个不同的定时任务需要管理,每次通过人工来进行干预有些笨拙,这时候就真的是“人工智能”了。
将这些定时任务的调度代码化才能够从这种手动管理的纯人力操作中解脱出来。在Python 生态中对于定时任务的一些操作:
1、schedule:第三方模块,该模块适合比较轻量级的一些调度任务,但却不适用于复杂时间的调度
2、APScheduler:第三方定时任务框架,是对Java第三方定时任务框架 Quartz 的模仿与移植,能提供比 schedule 更复杂的应用场景,并且各种组件都是模块化,易于使用与二次开发。
3、Celery Beat:属于 celery 这分布式任务队列第三方库下的一个定时任务组件,如果使用需要配合 RabbitMQ 或 Redis 这类的消息队列套件,需要花费一定的时间在环境搭建上,但在高版本中已经不支持 Windows。
为了满足能够相对复杂的时间条件,又不需要在前期的环境搭建上花费很多时间的前提下,选择 APScheduler 来对调度任务或定时任务进行管理是个性价比极高的选择。
二、APScheduler 概念与组件
这一框架的简单易用。在使用 APScheduler 之前,需要对这个框架的一些概念简单了解,主要有那么以下几个:触发器、任务持久化、执行器、调度器。
(一)触发器(trigger)
触发器用以触发定时任务的组件,在 APScheduler 中主要是指时间触发器,并且主要有三类时间触发器可供使用:
date:日期触发器。日期触发器主要是在某一日期时间点上运行任务时调用,是 APScheduler 里面最简单的一种触发器。通常也适用于一次性的任务或作业调度。
interval:间隔触发器。间隔触发器是在日期触发器基础上扩展了对时间部分,如时、分、秒、天、周这几个部分的设定。用以对重复性任务进行设定或调度的一个常用调度器。设定了时间部分之后,从起始日期开始会按照设定的时间去执行任务。
cron:cron 表达式触发器。cron 表达式触发器就等价于 Linux 上的 crontab,它主要用于更复杂的日期时间进行设定。但需要注意的是APScheduler 不支持 6 位及以上的 cron 表达式最多只支持到5位。
(二)、任务持久化(job stores)
任务持久化主要是用于将设定好的调度任务进行存储,即便是程序因为意外情况,如断电、电脑或服务器重启时,只要重新运行程序时APScheduler 就会根据对存储好的调度任务结果进行判断,如果出现已经过期但未执行的情况会进行相应的操作。APScheduler为提供了多种持久化任务的途径,默认是使用 memory 也就是内存的形式,但内存并不是持久化最好的方式。最好的方式则是通过像数据库这样的载体来将定时任务写入到磁盘当中,只要磁盘没有损坏就能将数据给恢复。APScheduler支持的且常用的数据库主要有:
sqlalchemy 形式的数据库,这里就主要是指各种传统的关系型数据库,如MySQL、PostgreSQL、SQLite 等。
mongodb 非结构化的 Mongodb 数据库,该类型数据库经常用于对非结构化或版结构化数据的存储或操作,如 JSON。
redis 内存数据库,通常用作数据缓存来使用,当然通过一些主从复制等方式也能实现当中数据的持久化或保存。
通常可以在创建 Scheduler 实例时创建,或是单独为任务指定。配置的方式相对简单,只需要指定对应的数据库链接即可。
(三)执行器(executor)
执行器顾名思义就是执行任务的对象,在计算机内通常要么是 CPU 调度任务,要么是单独维护一个线程来运行任务。所以 APScheduler 里的执行器通常就是 ThreadPoolExecutor 或 ProcessPoolExecutor 这样的线程池和进程池两种。当然如果是和协程或异步相关的任务调度,还可以使用对应的 AsyncIOExecutor、TwistedExecutor 和 GeventExecutor 三种执行器。
(四)调度器(scheduler)
调度器的选择主要取决于你当前的程序环境以及 APScheduler 的用途。根据用途的不同,APScheduler 又提供了以下几种调度器:
BlockingScheduler:阻塞调度器,当程序中没有任何存在主进程之中运行东西时,就则使用该调度器。
BackgroundScheduler:后台调度器,在不使用后面任何的调度器且希望在应用程序内部运行时的后台启动时才进行使用,如当前你已经开启了一个Django 或 Flask 服务。
AsyncIOScheduler:AsyncIO 调度器,如果代码是通过 asyncio 模块进行异步操作,使用该调度器。
GeventScheduler:Gevent 调度器,如果代码是通过 gevent 模块进行协程操作,使用该调度器
TornadoScheduler:Tornado 调度器,在 Tornado 框架中使用
TwistedScheduler:Twisted 调度器,在基于 Twisted 的框架或应用程序中使用
QtScheduler:Qt 调度器,在构建 Qt 应用中进行使用。
通常情况下如果不是和 Web 项目或应用集成共存,那么往往都首选 BlockingScheduler 调度器来进行操作,它会在当前进程中启动相应的线程来进行任务调度与处理;反之,如果是和 Web 项目或应用共存,那么需要选择 BackgroundScheduler 调度器,因为它不会干扰当前应用的线程或进程状况。基于对以上的概念和组件认识,就能基本上摸清 APScheduler 的运行流程:
1、设定调度器用以对任务的调度与安排进行全局统筹
2、对相应的函数或方法上设定相应的触发器,并添加到调度器中
3、如有任务持久化需要则需要设定对应的持久化层,否则默认使用内存存储任务
4、当触发器被触发时,就将任务交由执行器进行执行
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
6个技巧帮你提高Python运行效率
随着国内对人工智能领域发展的大力支持,Python编程语言成为国内使用增长率的最大的编程语言。越来越多的人加入Python的学习行列,企业对Python的使用也越来越普遍。Python能够让你在端时间内通过少量代码,实现大量的操作。这里小编整理了6个Python编程技巧,帮你提高Python的运行效率。
7779
2019-12-05 18:51:03
如何自学python?有好的建议吗?
自学的是一个节约成本的投资,能够按照自己设定的学习计划进行学习,时间安排也比较自由。可是自学需要强大的自制力,需要耐得住寂寞,每天固定的坚持学习,但是遇到技术难点很容易做牛角尖,导致半途而废。如何自学python?有好的建议吗?让我给大家说一说自学前大概做得准备吧!
7998
2020-01-13 15:56:28
Python中GC的垃圾回收算法分析
相信大家在面试中常常会碰到有关垃圾回收的问题,的确,Python和其他很多编程语言一样,都自带垃圾回收机制。本文主要和大家来分析一下Python中的垃圾回收算法。首先我们要知道,GC计算机术语指的是垃圾回收。而Python中的垃圾回收是以引用计数为主,但是为了弥补其算法的不足,所以又引入了标记-清除和分代收集算法为辅。
7411
2020-01-13 11:00:30
Lambda函数的语法结构解析
说到Lambda函数的语法结构,我想问大家一个问题,什么是Lambda表达式?众所周知,Lambda表达式是一个匿名函数,简单来讲就是没有函数名的函数,它还可以表示闭包。Lambda函数的出现简化了代码,它的语法结构可以这样写:(variable)->action。下面将详细为大家解析Lambda函数的语法结构,感兴趣的朋友可以接着看下去。
7394
2020-01-14 14:35:43
数据分析师需要学习哪些知识?
数据重要性不用多说,如今,运营、市场、销售等岗位都要求“数据分析”能力。而励志“数据分析”方向的同学,如果有扎实专业技能,再加一定业务解决能力,无论在严峻的当下,还是未来,对求职面试,或升职涨薪,都会有很大帮助。下面我们来看一看数据分析师需要学习的 Python 基础、科学计算库、Mysql 等知识,希望能帮不同阶段的朋友有效提升学习、工作效率,迅速扫清职场障碍。
7546
2020-06-05 10:29:21
