首页 » 软件开发 » 周期性的运行程序?Python APScheduler实现任务灵活调度(调度运行定时周期性触发器)

周期性的运行程序?Python APScheduler实现任务灵活调度(调度运行定时周期性触发器)

神尊大人 2024-07-24 20:17:54 0

扫一扫用手机浏览

文章目录 [+]

在我们的开发工作中,时常会有这样的开发需求,如需要定时或者周期性的运行某些程序,因此经常用到一些定时服务,如在 Linux系统中使用 Crond 服务实现程序的定时运行。

在 Python中也有这样的一个模块,那就是 APScheduler,它是基于Quartz 的一个 Python定时任务框架,实现了 Quartz的全部功能,使用起来十分简单、高效。
其提供了基于日期、固定时间间隔以及 Crontab类型的任务,并且支持持久化任务。
同时也提供了不同的存储机制,可以方便与数据库等第三方的外部持久化存储进行协同工作。
它主要包含了四种组件:

Triggers:任务触发器,任务以何种方式触发。
Job stores:任务存储器,持久存储任务。
Executors:任务执行器,执行任务的模块。
Schedulers:任务调度器,通过配置 trigger、job store、executor等实现对任务的增删改查等调度控制。
APScheduler安装

安装过程如下:

周期性的运行程序?Python APScheduler实现任务灵活调度(调度运行定时周期性触发器) 软件开发
(图片来自网络侵删)

任务存储器 Job stores

Job stores 存储被调度的任务,默认的任务存储是简单地把任务保存在内存(MemoryJobStore)中,其他的任务存储形式是将任务保存在数据库中。
一个任务的数据将在保存在持久化任务存储时被序列化,在加载时被反序列化。
调度器不能分享同一个任务存储。
job store支持主流的存储机制:redis、mongodb、内存等等。

以 MongoDBJobStore为例,实例如下:

执行器 Executors

Executors 处理任务的运行,他们通常通过在任务中提交制定的可调用对象到一个线程或者进城池来进行,当任务完成时,执行器将会通知调度器。

调度器 Schedulers

通常在应用只有一个调度器,调度器提供了处理任务存储、调度器、触发器合适的接口。
配置任务存储和执行器可以在调度器中完成,例如添加、修改和移除任务。
常用的调度器如下:

BlockingScheduler:仅可用在当前你的进程之内,与当前的进行共享计算资源,适合于只在进程中运行单个任务的情况,通常在调度器是你唯一要运行的东西时使用。
BackgroundScheduler: 在后台运行调度,不影响当前的系统计算运行,适合于要求任何在程序后台运行的情况,当希望调度器在应用后台执行时使用。
AsyncIOScheduler: 如果当前系统中使用了async module,则需要使用异步的调度器,适合于使用asyncio框架的情况。
GeventScheduler: 如果使用了 gevent,则需要使用该调度,适合于使用 gevent框架的情况。
TornadoScheduler: 如果使用了Tornado, 则使用当前的调度器,适合于使用 Tornado框架的应用。
TwistedScheduler:Twister应用的调度器,适合使用Twisted框架的应用。
QtScheduler: Qt的调度器,适合使用QT的情况。
触发器种类Triggers

Triggers 包含调度逻辑,每一个任务有它自己的触发器,用于决定接下来哪一个任务运行,根据 Triggers 中定义的时间点,执行频率,时间区间等等参数设置。
除了他们自己初始配置以外,触发器完全是无状态的,触发器有如下几种:

date:一次性任务,即只执行一次任务。
interval:循环任务,即按照时间间隔执行任务。
cron:定时任务,即在每个时间段执行任务。

interval 触发器实例

指定触发器为 interval,循环任务,即按照 时间间隔 执行任务。

参数如下

year (int|str) :表示四位数的年份,如2019年month (int|str) :表示取值范围为1-12月。
day (int|str) :表示取值范围为1-31日。
week (int|str) :一年中的第几周 (1-53)。
day_of_week (int|str) :表示一周中的第几天(0-6)。
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) :表示时区取值。

如上,我们设定 每2秒执行一次,运行结果如下:

date 触发器实例

指定触发器为 date,一次性任务,即只执行一次任务。

如上,我们设定任务 延时五秒 后执行,运行结果如下:

cron 触发器实例

指定触发器为 cron,定时任务,即在每个时间段执行任务。

参数如下

year (int|str) :表示四位数的年份,如2019年month (int|str) :表示取值范围为1-12月。
day (int|str) :表示取值范围为1-31日。
week (int|str) :一年中的第几周 (1-53)。
day_of_week (int|str) :表示一周中的第几天(0-6)。
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) :表示时区取值。

如上,我们设定在2、4月、7~9月,每天晚上22点21分执行一次任务,运行结果如下:

移除、暂停/恢复任务

标签:

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读3 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0