返回顶部
首页 > 资讯 > 后端开发 > Python >最新Python APScheduler 定时任务详解
  • 649
分享到

最新Python APScheduler 定时任务详解

2024-04-02 19:04:59 649人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、基本概念1.1、 触发器:triggers1.2、作业存储器:job stores1.3、执行器 executors1.4、调度器 schedulers二、调度器详解2.1、

一、基本概念

APScheduler全称Advanced python Scheduler 作用为在指定的时间规则执行指定的作业。

  • 指定时间规则的方式可以是间隔多久执行,可以是指定日期时间的执行,也可以类似Linux系统中Crontab中的方式执行任务。
  • 指定的任务就是一个Python函数。

1.1、 触发器:triggers

用于设定触发任务的条件: 触发器包含调度逻辑。每个任务都有自己的触发器,用于确定何时应该运行作业。除了初始配置之外,触发器完全是无状态的

1.2、作业存储器:job stores

用于存放任务,把任务存放在内存或数据库

  • 默认情况下,任务存放在内存中。也可以配置存放在不同类型的数据库中。如果任务存放在数据库中,那么任务的存取有一个序列化和反序列化的过程,同时修改和搜索任务的功能也是由任务储存器实现。
  • 注意一个任务储存器不要共享给多个调度器,否则会导致状态混乱

1.3、执行器 executors

用于执行任务,可以设定执行模式为单线程线程池任务会被执行器放入线程池或进程池去执行,执行完毕后,执行器会通知调度器。

1.4、调度器 schedulers

把上方三个组件作为参数,通过创建调度器实例来运行:一个调度器由上方三个组件构成,一般来说,一个程序只要有一个调度器就可以了。开发者也不必直接操作任务储存器、执行器以及触发器,因为调度器提供了统一的接口,通过调度器就可以操作组件,比如任务的增删改查。

在这里插入图片描述

二、调度器详解

  • BlockingScheduler : 阻塞式调度器:适用于只跑调度器的程序。
  • BackgroundScheduler: 后台调度器:适用于非阻塞的情况,调度器会在后台独立运行
  • AsynciOScheduler : Asyncio调度器,适用于应用使用AsnycIO的情况。
  • GeventScheduler : Gevent调度器,适用于应用通过Gevent的情况。
  • TornadoScheduler: Tornado调度器,适用于构建Tornado应用。
  • TwistedScheduler:Twisted调度器,适用于构建Twisted应用。
  • QtScheduler: Qt调度器,适用于构建Qt应用。

2.1、APScheduler有三种内置的触发器

  • date:日期:触发任务运行的具体日期
  • interval: 间隔:触发任务运行的时间间隔
  • cron: 周期:触发任务运行的周期

2.2、触发器公共参数

  • id:启动任务的ID具有唯一性
  • name: 设置启动任务的名称
  • coalesce :当由于某种原因导致某个job积攒了好几次没有实际运行(比如说系统挂了5分钟后恢复,有一个任务是每分钟跑一次的,按道理说这5分钟内本来是“计划”运行5次的,但实际没有执行),如果coalesce为True,下次这个job被submit给executor时,只会执行1次,也就是最后这次,如果为False,那么会执行5次(不一定,因为还有其他条件,看后面misfire_grace_time的解释)
  • max_instance: 就是说同一个job同一时间最多有几个实例再跑,比如一个耗时10分钟的job,被指定每分钟运行1次,如果我们max_instance值为5,那么在第6~10分钟上,新的运行实例不会被执行,因为已经有5个实例在跑了
  • misfire_grace_time:设想和上述coalesce类似的场景,如果一个job本来14:00有一次执行,但是由于某种原因没有被调度上,现在14:01了,这个14:00的运行实例被提交时,会检查它预订运行的时间和当下时间的差值(这里是1分钟),大于我们设置的30秒限制,那么这个运行实例不会被执行。
  • replace_existing: 如果调度的job在一个持久化的存储器里,当初始化应用程序时,必须要为job定义一个显示的ID并使用replace_existing=True, 否则每次应用程序重启时都会得到那个job的一个新副本

2.3、date内置触发器

date 是最基本的一种调度,作业任务只会执行一次。它表示特定的时间点触发。它的参数如下:

参数说明
run_date (datetime 或 str)作业的运行日期或时间
timezone (datetime.tzinfo 或 str)指定时区
from datetime import datetime
from datetime import date
from apscheduler.schedulers.blocking import BlockingScheduler
def job(text):
    print(text)
scheduler = BlockingScheduler()
# 在 2019-8-30 运行一次 job 方法
scheduler.add_job(job, 'date', run_date=date(2022, 4, 9), args=['text1'], id="1", coalesce=True, max_instances=1)
# 在 2019-8-30 01:00:00 运行一次 job 方法
scheduler.add_job(job, 'date', run_date=datetime(2022, 4, 9, 17, 40, 58), args=['text2'], id="2", coalesce=True, max_instances=1)
# 在 2019-8-30 01:00:01 运行一次 job 方法
scheduler.add_job(job, 'date', run_date='2022-4-9 17:41:00', args=['text3'], id="3", coalesce=True, max_instances=1)
scheduler.start()

2.4、interval 周期触发任务

参数说明
weeks (int)间隔几周
days (int)间隔几天
hours (int)间隔几小时
minutes (int)间隔几分钟
seconds (int)间隔多少秒
start_date (datetime 或 str)开始日期
end_date (datetime 或 str)结束日期
timezone (datetime.tzinfo 或str)时区
@sched.scheduled_job(
    "interval", id=spider_job_name + "_bg_data", coalesce=True, max_instances=1, minutes=20
)
def tick_rzjg_detail_xq():
    """
    快速完成
    :return:
    """
    each = "rzjg_bg_data"
    cmd_str = f"cd {ROOT} && bash run_spider.sh {each} --loglevel=INFO"
    print(cmd_str)
    os.system(cmd_str)
def func():
    print("Press Ctrl+C to exit")
    # 直接触发一次
    tick_rzjg_detail_xq()
    try:
        sched.start()
    except (KeyboardInterrupt, SystemExit):
        pass

if __name__ == "__main__":
    func()

2.5、cron 触发器 在特定时间周期性地触发,和Linux crontab格式兼容。

它是功能最强大的触发器

参数说明
year (int 或 str) 年,4位数字
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)指定时区
表达式参数类型描述
*所有通配符。例:minutes=*即每分钟触发
*/a所有可被a整除的通配符
a-b所有范围a-b触发
a-b/c所有范围a-b,且可被c整除时触发
xth y第几个星期几触发。x为第几个,y为星期几
last x一个月中,最后个星期几触发
last一个月最后一天触发
x,y,z所有组合表达式,可以组合确定值或上方的表达式
 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=22, minute='*/1', args=['job1'])
    # 在每天22和23点的25分,运行一次 job 方法
    scheduler.add_job(job, 'cron', hour='22-23', minute='25', args=['job2'])
    # 在每天 8 点,运行一次 job 方法
    scheduler.add_job(job, 'cron', hour='8', args=['job2'])
    # 在每天 8 点 20点,各运行一次 job 方法    设置最大运行实例数
    scheduler.add_job(job, 'cron', hour='8, 20', minute=30, max_instances=4)
    scheduler.start()

到此这篇关于Python APScheduler 定时任务详解的文章就介绍到这了,更多相关Python APScheduler 定时任务内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 最新Python APScheduler 定时任务详解

本文链接: https://lsjlt.com/news/118325.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 最新Python APScheduler 定时任务详解
    目录一、基本概念1.1、 触发器:triggers1.2、作业存储器:job stores1.3、执行器 executors1.4、调度器 schedulers二、调度器详解2.1、...
    99+
    2024-04-02
  • 详解Python使用apscheduler定时执行任务
    apscheduler 的使用   我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客...
    99+
    2024-04-02
  • python 包之 APScheduler 定时任务
    目录一、安装二、定时执行一次三、间隔执行四、每日定时执行一次五、每几分钟执行一次六、每小时执行一次七、调度器分类一、安装 pip install apscheduler 二、定时执行...
    99+
    2024-04-02
  • 详解Python利用APScheduler框架实现定时任务
    目录背景样例代码代码详解执行结果知识点补充背景 最近在做一些python工具的时候,常常会碰到定时器问题,总觉着使用threading.timer或者schedule模块非常不优雅。...
    99+
    2024-04-02
  • Python定时任务框架APScheduler安装使用详解
    目录前言一、APscheduler简介二、APscheduler安装三、APscheduler组成部分1.Job 作业2.Trigger 触发器3.Jobstore 作业存储4.Ex...
    99+
    2024-04-02
  • Python实现定时任务利器之apscheduler使用详解
    目录前言初识apschedulerapscheduler有哪些模块1. 触发器triggers:2. 任务存储器job_stores3. 执行器executors4. 调度器sche...
    99+
    2024-04-02
  • Python - 定时任务框架【APScheduler】基本使用详解(一)
    一. 前言 一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板...
    99+
    2023-09-06
    python 开发语言
  • python定时任务apscheduler的详细使用教程
    目录前言安装主要组成部分简单应用完整代码总结前言 我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客户微信...
    99+
    2024-04-02
  • python定时任务apscheduler如何使用
    这篇文章主要介绍了python定时任务apscheduler如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python定时任务apscheduler如何使用文章都会有所收获,下面我们一起来看看吧。安装p...
    99+
    2023-06-29
  • python包之APScheduler定时任务怎么实现
    这篇文章主要介绍“python包之APScheduler定时任务怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python包之APScheduler定时任务怎么实现”文章能帮助大家解决问题。...
    99+
    2023-06-30
  • Python中怎么使用apscheduler定时执行任务
    今天小编给大家分享一下Python中怎么使用apscheduler定时执行任务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-06-29
  • Python使用apscheduler模块设置定时任务的实现
    目录一、安装二、ApScheduler 简介1 APScheduler的组件2 调度器的种类3 内置的触发器类型三、使用举例1 使用date类型的触发器2 使用interval类型的...
    99+
    2024-04-02
  • Pythonflask框架定时任务apscheduler应用介绍
    目录基本使用trigger启动方式cron启动方式使用装饰器定时启动任务flask-apscheduler将apscheduler移植到了flask应用中,使得在flask中可以非常...
    99+
    2024-04-02
  • Python Celery定时任务详细讲解
    目录前言一、Celery定时任务是什么?二、使用步骤1.代码结构2.启动定时任务3.执行结果总结前言 Celery在python中的应用除了实现异步任务(async task)外也可...
    99+
    2024-04-02
  • 使用APScheduler怎么实现一个定时任务
    使用APScheduler怎么实现一个定时任务?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、安装apschedulerpip install apschedulerpi...
    99+
    2023-06-14
  • Java定时任务详解
    定时任务在项目中经常会使用到,本文主要根据博主自己使用定时的经验分如下几点介绍定时任务:1、Quartz定时任务简介及Spring配置Quartz定时任务2、SchedulerFactory对定时任务进行增删改查3、总结Quartz定时任务...
    99+
    2023-05-31
    java 定时任务 ava
  • 一文详解Python定时任务触发
    目录1.新建调度器schedulers2.添加调度任务trigger3.运行调度任务4.特点,其他操作APScheduler APScheduler 四个组件分别为: 调度器(sch...
    99+
    2023-05-14
    Python定时任务触发 Python定时任务
  • python apscheduler cron定时任务触发接口自动化巡检过程
    目录python cron定时任务触发接口自动化巡检apscheduler报错:Run time of job …… next run at: &hell...
    99+
    2023-03-14
    python定时任务 python apscheduler cron python apscheduler定时任务
  • Java spring定时任务详解
    目录一、定时任务1、cron表达式2、cron示例3、SpringBoot整合总结一、定时任务 1、cron表达式 语法:秒 分 时 日 月 周 年 (其中“年”Spring不支持...
    99+
    2024-04-02
  • SpringBoot定时任务 @Scheduled详解
    博主在最近的开发中又遇到了关于定时调度的开发任务,在定时调度其实有很多的第三方平台可以接入,但是其实在SpringBoot有自带的定时任务注解@Scheduled。@Scheduled可以通过注解配置快速实现方法的定时调度,直接在方法加上@...
    99+
    2023-10-01
    spring boot java spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作