返回顶部
首页 > 资讯 > 后端开发 > Python >Python - 定时任务框架【APScheduler】基本使用详解(一)
  • 635
分享到

Python - 定时任务框架【APScheduler】基本使用详解(一)

python开发语言 2023-09-06 19:09:16 635人浏览 八月长安

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

摘要

一. 前言 一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板

一. 前言

一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力
我们可以使用Django的模板渲染功能完成页面渲染

二. APSchedule简介

APScheduler的全称是Advanced python Scheduler。它是一个轻量级的 Python 定时任务调度框架
APScheduler 支持三种调度任务:

  • 固定时间间隔
  • 固定时间点(日期)
  • linux 下的 Crontab命令。同时,它还支持异步执行、后台执行调度任务。

三. 使用

1.安装APScheduler

pip install APScheduler

2. 使用APScheduler 步骤

APScheduler 使用起来还算是比较简单。运行一个调度任务只需要以下三部曲:

  1. 新建一个 schedulers (调度器)
  2. 添加一个调度任务(job stores)
  3. 运行调度任务

简单示例
项目模块或者根目录的__init__.py文件中添加以下代码

from apscheduler.scheduler import Schedulersched = Scheduler()@sched.interval_schedule(seconds=2,misfire_grace_time=3600)def excute_task():    fun()  #执行任务函数sched.start()  #启动定时任务脚本

启动项目即可自动执行

python manage.py runserver 8000

3. 基础组件介绍

APScheduler 有四种组件,分别是:调度器(scheduler),作业存储(job store),触发器(trigger),执行器(executor)。

  • schedulers(调度器)

    它是任务调度器,属于控制器角色。它配置作业存储器和执行器可以在调度器中完成,例如添加、修改和移除作业。

  • triggers(触发器)

    描述调度任务被触发的条件。不过触发器完全是无状态的。

  • job stores(作业存储器)

    任务持久化仓库,默认保存任务在内存中,也可将任务保存都各种数据库中,任务中的数据序列化后保存到持久化数据库,从数据库加载后又反序列化。

  • executors(执行器)

    负责处理作业的运行,它们通常通过在作业中提交指定的可调用对象到一个线程或者进城池来进行。当作业完成时,执行器将会通知调度器

schedulers(调度器)

提供 7种调度器,能够满足我们各种场景的需要。例如:后台执行某个操作,异步执行操作等。经常使用的为BackgroundScheduler
调度器分别是:

  • BlockingScheduler 调度器在当前进程的主线程中运行,也就是会阻塞当前线程。
  • BackgroundScheduler 调度器在后台线程中运行,不会阻塞当前线程。
  • AsynciOScheduler 结合 asyncio 模块(一个异步框架)一起使用
  • GeventScheduler 程序中使用 gevent(高性能的Python并发框架)作为IO模型,和 GeventExecutor
    配合使用。
  • TornadoScheduler 程序中使用 Tornado(一个WEB框架)的IO模型,用 ioloop.add_timeout
    完成定时唤醒。
  • TwistedScheduler 配合 TwistedExecutor,用 Reactor.callLater 完成定时唤醒
  • QtScheduler 你的应用是一个 Qt 应用,需使用QTimer完成定时唤醒。

triggers(触发器)

APScheduler 有三种内建的 trigger

参数说明
run_date (datetime 或 str)作业的运行日期或时间
timezone (datetime.tzinfo 或 str)指定时区

date 触发器使用示例如下:

from datetime import datetimefrom datetime import datefrom apscheduler.schedulers.background import BackgroundSchedulerdef job_func(text):    print(text)scheduler = BackgroundScheduler()# 在 2017-12-13 时刻运行一次 job_func 方法scheduler.add_job(job_func, 'date', run_date=date(2017, 12, 13), args=['text'])# 在 2017-12-13 14:00:00 时刻运行一次 job_func 方法scheduler.add_job(job_func, 'date', run_date=datetime(2017, 12, 13, 14, 0, 0), args=['text'])# 在 2017-12-13 14:00:01 时刻运行一次 job_func 方法scheduler.add_job(job_func, 'date', run_date='2017-12-13 14:00:01', args=['text'])scheduler.start()

interval 触发器

固定时间间隔触发。interval 间隔调度

import datetimefrom apscheduler.schedulers.background import BackgroundSchedulerdef job_func(text):    print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])scheduler = BackgroundScheduler()# 每隔两分钟执行一次 job_func 方法scheduler.add_job(job_func, 'interval', minutes=2)# 在 2017-12-13 14:00:01 ~ 2017-12-13 14:00:10 之间, 每隔两分钟执行一次 job_func 方法scheduler.add_job(job_func, 'interval', minutes=2, start_date='2017-12-13 14:00:01' , end_date='2017-12-13 14:00:10')scheduler.start()

cron 触发器

在特定时间周期性地触发,和Linux crontab格式兼容。它是功能最强大的触发器。

import datetimefrom apscheduler.schedulers.background import BackgroundSchedulerdef job_func(text):    print("当前时间:", datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])scheduler = BackgroundScheduler()# 在每年 1-3、7-9 月份中的每个星期一、二中的 00:00, 01:00, 02:00 和 03:00 执行 job_func 任务scheduler.add_job(job_func, 'cron', month='1-3,7-9',day='0, tue', hour='0-3')scheduler.start()

四. 作业存储(job store)

该组件是对调度任务的管理

添加 job

有两种添加方法,其中一种上述代码用到的 add_job(), 另一种则是scheduled_job()修饰器来修饰函数。

这个两种办法的区别是:
第一种方法返回一个 apscheduler.job.Job 的实例,可以用来改变或者移除 job。
第二种方法只适用于应用运行期间不会改变的 job。

第二种添加任务方式的例子:

import datetimefrom apscheduler.schedulers.background import BackgroundScheduler@scheduler.scheduled_job(job_func, 'interval', minutes=2)def job_func(text):    print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])scheduler = BackgroundScheduler()scheduler.start()

移除 job

移除 job 也有两种方法:remove_job() 和 job.remove()。
remove_job() 是根据 job 的 id 来移除,所以要在 job 创建的时候指定一个 id。
job.remove() 则是对 job 执行 remove 方法即可

scheduler.add_job(job_func, 'interval', minutes=2, id='job_one')scheduler.remove_job(job_one)job = add_job(job_func, 'interval', minutes=2, id='job_one')job.remvoe()

获取 job 列表

通过 scheduler.get_jobs() 方法能够获取当前调度器中的所有 job 的列表

修改 job

如果你因计划改变要对 job 进行修改,可以使用Job.modify() 或者 modify_job()方法来修改 job 的属性。但是值得注意的是,job 的 id 是无法被修改的。

scheduler.add_job(job_func, 'interval', minutes=2, id='job_one')scheduler.start()# 将触发时间间隔修改成 5分钟scheduler.modify_job('job_one', minutes=5)job = scheduler.add_job(job_func, 'interval', minutes=2)# 将触发时间间隔修改成 5分钟job.modify(minutes=5)

关闭 job

默认情况下调度器会等待所有正在运行的作业完成后,关闭所有的调度器和作业存储。如果你不想等待,可以将 wait 选项设置为 False。

scheduler.shutdown()scheduler.shutdown(wait=false)

五.执行器(executor)

执行器顾名思义是执行调度任务的模块。最常用的 executor 有两种:ProcessPoolExecutorThreadPoolExecutor

下面是显式设置 job store(使用monGo存储)和 executor 的代码的示例。

代码示例

from pymongo import MongoClientfrom apscheduler.schedulers.blocking import BlockingSchedulerfrom apscheduler.jobstores.mongoDB import MongoDBJobStorefrom apscheduler.jobstores.memory import MemoryJobStorefrom apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor  def my_job():    print 'hello world'host = '127.0.0.1'port = 27017client = MongoClient(host, port) jobstores = {    'mongo': MongoDBJobStore(collection='job', database='test', client=client),    'default': MemoryJobStore()}executors = {    'default': ThreadPoolExecutor(10),    'processpool': ProcessPoolExecutor(3)}job_defaults = {    'coalesce': False,    'max_instances': 3}scheduler = BlockingScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)scheduler.add_job(my_job, 'interval', seconds=5) try:    scheduler.start()except SystemExit:    client.close()

以上就是python- 定时任务框架【APScheduler】基本使用介绍,希望对你有所帮助!

来源地址:https://blog.csdn.net/qq_43030934/article/details/131421631

--结束END--

本文标题: Python - 定时任务框架【APScheduler】基本使用详解(一)

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

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

猜你喜欢
  • Python - 定时任务框架【APScheduler】基本使用详解(一)
    一. 前言 一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板...
    99+
    2023-09-06
    python 开发语言
  • Python定时任务框架APScheduler安装使用详解
    目录前言一、APscheduler简介二、APscheduler安装三、APscheduler组成部分1.Job 作业2.Trigger 触发器3.Jobstore 作业存储4.Ex...
    99+
    2024-04-02
  • 详解Python利用APScheduler框架实现定时任务
    目录背景样例代码代码详解执行结果知识点补充背景 最近在做一些python工具的时候,常常会碰到定时器问题,总觉着使用threading.timer或者schedule模块非常不优雅。...
    99+
    2024-04-02
  • 详解Python使用apscheduler定时执行任务
    apscheduler 的使用   我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客...
    99+
    2024-04-02
  • Pythonflask框架定时任务apscheduler应用介绍
    目录基本使用trigger启动方式cron启动方式使用装饰器定时启动任务flask-apscheduler将apscheduler移植到了flask应用中,使得在flask中可以非常...
    99+
    2024-04-02
  • 最新Python APScheduler 定时任务详解
    目录一、基本概念1.1、 触发器:triggers1.2、作业存储器:job stores1.3、执行器 executors1.4、调度器 schedulers二、调度器详解2.1、...
    99+
    2024-04-02
  • python定时任务apscheduler如何使用
    这篇文章主要介绍了python定时任务apscheduler如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python定时任务apscheduler如何使用文章都会有所收获,下面我们一起来看看吧。安装p...
    99+
    2023-06-29
  • python定时任务apscheduler的详细使用教程
    目录前言安装主要组成部分简单应用完整代码总结前言 我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客户微信...
    99+
    2024-04-02
  • Python实现定时任务利器之apscheduler使用详解
    目录前言初识apschedulerapscheduler有哪些模块1. 触发器triggers:2. 任务存储器job_stores3. 执行器executors4. 调度器sche...
    99+
    2024-04-02
  • 详解python调度框架APScheduler使用
    最近在研究python调度框架APScheduler使用的路上,那么今天也算个学习笔记吧! # coding=utf-8 """ Demonstrates how to use the backgro...
    99+
    2022-06-04
    详解 框架 python
  • 详解定时任务框架Quartz的使用
    目录一、什么是Quartz二、Quartz Demo搭建三、Quartz核心详解一、什么是Quartz 什么是Quartz Quartz是OpenSymphony开源组织在Job s...
    99+
    2023-02-13
    定时任务框架Quartz使用 定时任务框架Quartz
  • 使用APScheduler怎么实现一个定时任务
    使用APScheduler怎么实现一个定时任务?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、安装apschedulerpip install apschedulerpi...
    99+
    2023-06-14
  • Python中怎么使用apscheduler定时执行任务
    今天小编给大家分享一下Python中怎么使用apscheduler定时执行任务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-06-29
  • Python下定时任务框架APSched
    今天准备实现一个功能需要用到定时执行任务,所以就看到了Python的一个定时任务框架APScheduler,试了一下感觉还不错。1.APScheduler简介: APScheduler是Python的一个定时任务框架,可以很方便的满足用户定...
    99+
    2023-01-31
    框架 Python APSched
  • Python使用apscheduler模块设置定时任务的实现
    目录一、安装二、ApScheduler 简介1 APScheduler的组件2 调度器的种类3 内置的触发器类型三、使用举例1 使用date类型的触发器2 使用interval类型的...
    99+
    2024-04-02
  • phpYii2框架创建定时任务方法详解
    目录简单的定时任务脚步文件传递参数设置参数别名在Linux配置crontab在我们项目开发中,需要使用定时任务来完成批处理业务,下面通过Yii2框架来实现定时任务 Yii2框架定时任...
    99+
    2024-04-02
  • 一文详解Python定时任务触发
    目录1.新建调度器schedulers2.添加调度任务trigger3.运行调度任务4.特点,其他操作APScheduler APScheduler 四个组件分别为: 调度器(sch...
    99+
    2023-05-14
    Python定时任务触发 Python定时任务
  • 详解Android之图片加载框架Fresco基本使用(一)
    PS:Fresco这个框架出的有一阵子了,也是现在非常火的一款图片加载框架.听说内部实现的挺牛逼的,虽然自己还没研究原理.不过先学了一下基本的功能,感受了一下这个框架的强大之处...
    99+
    2022-06-06
    图片 Android
  • 详解使用python crontab设置linux定时任务
    熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务。可以通过命令crontab -e编写任务。当然也可以直接写配置文件设置任务。 但是有时候希望通过脚本自动设置,比如我们应用程序部...
    99+
    2022-06-04
    详解 python linux
  • golang微服务框架基础Gin基本路由使用详解
    目录概述1. 基本路由2. 路由参数获取URL路径全部参数获取URL路径单个参数获取URL中指定的参数获取指定默认值的参数的概述 路由是自定义url地址执行指定的函数,良好的路由定义...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作