APScheduler任务调度快速入门实践

news2024/11/29 8:48:08

什么是APScheduler

APScheduler是一个用于任务调度和定时任务管理的Python库。它提供了一个简单而灵活的方式来定义、调度和执行任务。

APScheduler的架构由以下几个核心组件组成:

  • 调度器(Scheduler):调度器负责管理任务的调度和执行。它可以根据预定的时间表触发任务的运行,支持不同类型的调度器(如定时、间隔、CRON表达式等)。

  • 触发器(Trigger):触发器定义了任务运行的时间触发条件。APScheduler提供了多种内置触发器,例如date触发器、interval触发器和cron触发器,用于定义不同类型的时间表。

  • 作业(Job):作业是需要调度和执行的任务。你可以定义自己的作业类,并在其中指定要执行的任务逻辑。

  • 执行器(Executor):执行器定义了任务的执行方式。APScheduler提供了不同的执行器,包括默认的线程执行器和进程执行器,以及基于异步框架的执行器(如Tornado、Twisted和Asyncio)。

在这里插入图片描述

如何正确选择

选择正确的调度器(scheduler)、作业存储(job store)、执行器(executor)和触发器(trigger)取决于环境以及如何使用APScheduler。根据应用程序使用的框架和技术,选择相应的调度器来与应用程序集成。下面是选择调度器的简要指南:

  • BlockingScheduler:当调度器是进程中唯一运行的内容时使用。

  • BackgroundScheduler:当没有使用下面提到的任何框架,并且希望调度器在应用程序内后台运行时使用。

  • AsyncIOScheduler:当应用程序使用asyncio模块时使用。

  • GeventScheduler:当应用程序使用gevent时使用。

  • TornadoScheduler:当正在构建一个Tornado应用程序时使用。

  • TwistedScheduler:当正在构建一个Twisted应用程序时使用。

  • QtScheduler:当正在构建一个Qt应用程序时使用。

其中,BlockingScheduler是最常用的调度器,适用于调度器是进程中唯一运行的情况。BackgroundScheduler适用于希望在应用程序内部以后台方式运行调度器的情况。而其他调度器如AsyncIOScheduler、GeventScheduler、TornadoScheduler、TwistedScheduler和QtScheduler适用于特定的框架和应用程序类型。

当安排一个作业时,需要选择一个触发器(trigger)。触发器确定作业运行时计算日期/时间的逻辑。APScheduler提供了三种内置的触发器类型:

  • date(日期):在特定的时间点运行作业时使用。
  • interval(间隔):在固定的时间间隔内运行作业时使用。
  • cron(定时):在每天的特定时间点周期性地运行作业时使用。

还可以将多个触发器组合成一个触发器,它会在所有参与的触发器所约定的时间点触发,或者当任何一个触发器触发时激活。有关组合触发器的更多信息,请参阅相关文档。

添加作业/任务

有两种方法可以向调度器添加作业:

  • 通过调用add_job()函数
  • 通过使用@scheduled_job()装饰函数

add_job()方法是最常用的方法。@scheduled_job()方法主要是为了方便声明在应用程序运行时不会改变的作业。add_job()方法返回一个apscheduler.job.Job实例,可以使用该实例在以后修改或删除该作业。

可以随时在调度器上安排作业。如果在添加作业时调度器尚未运行,作业将被暂时安排,其第一次运行时间将在调度器启动时计算。

重要提示:如果使用序列化作业的执行器或作业存储,将对作业添加一些要求:

  • 目标可调用函数必须是全局可访问的。
  • 可调用函数的任何参数都必须是可序列化的。
  • 在内置的作业存储中,只有MemoryJobStore不会序列化作业。在内置的执行器中,只有ProcessPoolExecutor会序列化作业。

快速安装与使用

安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple apscheduler

使用步骤

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

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

示例代码

from datetime import datetime
import os
from apscheduler.schedulers.blocking import BlockingScheduler

def test_tick():
    print('The time is: %s' % datetime.now())

if __name__ == '__main__':
    scheduler = BlockingScheduler()
    scheduler.add_job(test_tick, 'cron',minute='20',second='50')

    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        pass

注意:任务启动超时的问题:增加misfire_grace_time参数,提高容错能力,如下代码。

scheduler.add_job(set_pv_forecast, 'cron',hour = hour, minute = minute, second=second, misfire_grace_time=120)

如何使用ctrl+break键优雅退出服务

在程序最上面的代码中,加入如下内容。

import signal
import sys

def exit_gracefully():
    sys.exit(0)

signal.signal(signal.SIGINT, exit_gracefully)
signal.signal(signal.SIGTERM, exit_gracefully)

参考:

南哥的天下. Python定时框架 Apscheduler 详解. 2014.06
APScheduler User guide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初探core组件:OpenCV数据结构与基本绘图

OpenCV数据结构与基本绘图 1. 基础图像容器 Mat 1.1 数字图像存储概述 我们有多种方法从现实世界获取数字图像:数码相机、扫描仪、计算机断层扫描和磁共振成像等等。在每一种情况下,我们(人类)看到的都是图像。然而&#xff0c…

不可错过的Markdown编辑利器:跟随Typora,书写卓越

在现代社会中,快速而优雅地处理文本已经成为许多人的必备技能。尤其是对于程序员、研究者和专业撰稿人来说,拥有一款功能强大且易上手的文本编辑器显得尤为重要。Typora正是这样一款受到广泛好评的Markdown编辑器,它以简洁的界面、丰富的功能…

《实战AI低代码》AI大模型在低代码开发项目管理中的实战经验总结

目录 一、WBS任务分解 二、知识库自动生成 三、实施风险预估 随着ChatGPT大火之后,新的AI技术和模型被证明已经具备的很高的使用价值。 诸如Copilot、Midjourney、notion等产品通过AI的加持,已经让用户能够充分地在应用层面感受到了便利性。 原本几天的工作通过AI模型,可…

Web实验三 CSS基本网页布局实验

实验原理 通过定义css样式,理解css属性以及页面真整体结构布局的方法及设计思想。 实验目的 理解并掌握多种css选择器的使用方法 理解并掌握后代选择器的作用及使用设计方法 理解并掌握伪类的作用、意义及使用方法 理解并掌握基于div容器页面布局的方法 理解并掌握…

TANL:STRUCTURED PREDICTION AS TRANSLATION BETWEEN AUGMENTED NATURAL LANGUAGES

原文链接:https://openreview.net/pdf?idUS-TP-xnXI ICLR 2021 介绍 问题 大多数解决结构性预测的方法都是在预训练模型上对特定的任务进行训练,存在两个局限性: 1)判别分类器不能很好地利用预训练模型中对于该任务标签的已知知…

这个事实已冲击并颠覆我的认知:时间不多了

我们都知道人生短暂,可到底是怎么个短法? 十年是个模糊的表述,我们很难在脑海里想象十年是什么概念,但如果换成十个冬天,跟父母在一起十天,这样描述就会更直观些。 WaitButWhy对人生的时间进行了拆解&#…

Cesium教程(十九):Cesium粒子系统

Cesium教程(十九):Cesium粒子系统 1、粒子系统 1.1 什么是粒子系统 Cesium粒子系统是一种模拟复杂物理效应的图形技术,是由小图像组成的集合,当他们在一起形成更复杂的“模糊”对象时,会形成火、烟、云或烟火等。 1.2 初始粒子系统 效果预览 完整代码 <!DOCTYPE htm…

day05--java高级编程:Junit单元测试框架、泛型,集合:集合数组互转,迭代器,增强for循环,集合工具类,数据结构简介

补充&#xff1a;Junit单元测试框架 1. 简介 概述&#xff1a; JUnit是使用Java语言实现的单元测试框架&#xff0c;它是开源的&#xff0c;Java开发者都应当学习并使用JUnit编写单元测试。此外&#xff0c;几乎所有的IDE工具都集成了JUnit&#xff0c;这样我们就可以直接在…

CoreDX DDS应用开发指南(9)服务质量QoS

12 服务质量QoS DDS的强大功能之一是支持各种服务质量(QoS)设置。QoS设置允许应用程序开发人员定制发布者、订阅者的行为以及它们之间的通信。 从DomainParticipantFactory到DataReader和DataWriter,大多数DDS实体都有一组适用的QoS设置。QoS设置包含在一个结构中。 例如,D…

【Flutter】Flutter 如何获取当前路由

文章目录 一、前言二、Flutter 路由基础知识1. 什么是路由2. Flutter 中的路由管理 三、如何在 Flutter 中获取当前路由1. 使用 NavigatorState 类2. 使用 ModalRoute 类 四、代码示例1. 一个简单的获取当前路由的例子2. 实际业务场景中获取当前路由的例子 五、完整可运行的代码…

什么才是好的测试用例?

对于测试用例来讲&#xff0c;“好的”测试用例一定是一个完备的集合&#xff0c;能够覆盖所有的等价类以及各种边界值&#xff0c;而跟能否发现缺陷无关。 如果把测试软件看做一个池塘&#xff0c;软件缺陷是池塘中的鱼&#xff0c;建立测试用例集的过程就像是在编织一张捕鱼…

新能源驱动电机NVH开发研究

摘要&#xff1a; 本文介绍了新能源驱动电机行业发展现状&#xff0c;详细论述了目前行业内主流电机&#xff1a; 1、驱动电机现状 驱动电机是新能源车辆和混合动力车辆的核心动力源&#xff0c;基于电磁感应效应&#xff0c;驱动电机将整车提供的电能转化为机械能&#xff0c…

一文3000字从0到1用【 pytest+excel】实现自动化接口测试

项目结构 1.common 存放公用方法 login.py 前置条件类public.py 获取文件指定目录类 复制代码 2. base 存放底层方法类 method.py复制代码 3. data 存放数据 data.xls 复制代码 4. tests 存放用例类 pytest test_excel.py5. utils存放工具类operationExcel.py 复制代码 代…

谷歌高级语法有哪些,以及如何开发国外客户

谷歌高级语法指令常用的有下面几个&#xff1a; site、inurl、intitle、intext、filetype、link、index of、related 谷歌高级语法用法&#xff1a; 1.Site的三种常用用法 示例&#xff1a;site域名&#xff08;site:org&#xff09; site域名contact(site:org contact) 产…

HarmonyOS元服务端云一体化开发快速入门(上)

一、前提条件 您已使用已实名认证的华为开发者帐号登录DevEco Studio。 请确保您的华为开发者帐号余额充足&#xff0c;账户欠费将导致云存储服务开通失败。 二、选择云开发模板 1.选择以下任一种方式&#xff0c;打开工程创建向导界面。 如果当前未打开任何工程&#xff0c…

【宿舍管理系统】注册登录页面的实现(前端)

目录 一.创建一个jsp文件&#xff0c;命名为login.jsp 代码&#xff1a; 1. 2. 3. 4. 5. 6. ​编辑 二. 创建一个css文件&#xff0c;并命名为style.css 1. ​编辑效果如下&#xff1a; ​编辑 代码解析&#xff1a; 2. 效果如下&#xff1a; 代码解析&#xff1…

如何做好《关键信息基础设施安全保护要求》提到的收敛暴露面?

5月1日&#xff0c;《信息安全技术 关键信息基础设施安全保护要求》&#xff08;GB/T 39204-2022&#xff09;国家标准正式实施。该标准作为关键信息基础设施安全保护标准体系的构建基础&#xff0c;提出了关键信息基础设施安全保护的三项基本原则&#xff0c;为运营者开展关键…

华为OD机试真题 JavaScript 实现【最左侧冗余覆盖子串】【2023Q2 100分】

一、题目描述 给定两个字符串 s1 和 s2 和正整数k&#xff0c;其中 s1 长度为 n1&#xff0c;s2 长度为 n2&#xff0c; 在s2中选一个子串&#xff0c;满足: 该子串长度为n1k&#xff1b;该子串中包含s1中全部字母&#xff1b;该子串每个字母出现次数不小于s1中对应的字母&am…

2023年,现在学Python还吃香吗?计算机专业怎么样?

自从ChatGPT诞生以来&#xff0c;各大科技公司纷纷推出了自己的AI产品&#xff0c;在这个赛道上卷生卷死&#xff0c;纷纷布局。 从Google的Bard AI、OpenAI出走团队的Claude&#xff0c;到中国的众多公司&#xff0c;如百度的文心一言。 总的来说&#xff0c;AI的应用领域日…

Java培训周期一般多长?Java培训班过来人告诉你!

市场上比较靠谱的java培训机构的培训时间一般都是5-6个月&#xff0c;好程序员是4个月&#xff0c;个别培训机构可能因为班型不同而有所区别。学的时间太短学到的知识可能会有遗漏&#xff0c;造成基础不扎实;学习时间太长也会过于拖沓&#xff0c;还降低了整个培训的性价比。 …