前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >太好用了!Python 定时任务调度框架 APScheduler 详解!

太好用了!Python 定时任务调度框架 APScheduler 详解!

作者头像
Python兴趣圈
发布2023-12-11 17:09:19
发布2023-12-11 17:09:19
7.9K00
代码可运行
举报
文章被收录于专栏:翩翩白衣少年翩翩白衣少年
运行总次数:0
代码可运行

前言

我们在工作过程中,可能会遇到有定时任务的需求。大部分定时任务偏向 数据采集、消息提醒、邮件自动发送、数据指标统计 等场景。

比如:定时执行任务。每天早上 8 点定时推送日报。又或者:每一个周期执行一次任务。每周统计一次运营平台数据,形成趋势图,等等,这样的场景有很多。

今天,小编就跟大家分享下 Python 定时任务的实现方法。

正文

Python 内置方法sleep()threading.Timersched 等也可实现定时任务的功能,但是都不怎么完美,太耗CPU资源了。因此,需要一个全能的任务调度库。它就是 APScheduler

1 APScheduler 简介

APScheduler 的全称是 Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔固定时间点(日期)Linux 下的 Crontab 命令。同时,它还支持异步执行、后台执行调度任务。

2 安装

使用 pip 包管理工具安装 APScheduler 是最方便快捷的。

代码语言:javascript
代码运行次数:0
运行
复制
pip install APScheduler

3 使用步骤

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

  • • 新建一个 schedulers (调度器)
  • • 添加一个调度任务(job stores)
  • • 运行调度任务

下面是执行每 2 秒报时的简单示例代码:

4 基础组件

APScheduler 有四种组件:

  • 调度器(Scheduler)
  • 作业存储(Job Store)
  • 触发器(Trigger)
  • 执行器(Executor)

schedulers(调度器)

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

它提供 7 种调度器,能够满足我们各种场景的需要。(最常用的是前3种)

  • • 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: 1)date 触发器 date 是最基本的一种调度,作业任务只会执行一次。它表示特定的时间点触发。它的参数如下:

参数

说明

run_date (datetime 或 str)

作业的运行日期或时间

timezone (datetime.tzinfo 或 str)

指定时区

使用示例如下:

2)interval 触发器 固定时间间隔触发。interval 间隔调度,参数如下:

参数

说明

weeks (int)

间隔几周

days (int)

间隔几天

hours (int)

间隔几小时

minutes (int)

间隔几分钟

seconds (int)

间隔多少秒

start_date (datetime 或 str)

开始日期

end_date (datetime 或 str)

结束日期

timezone (datetime.tzinfo 或str)

时区

interval 触发器使用示例如下:

3)cron 触发器 在特定时间周期性地触发,和Linux crontab格式兼容。它是功能最强大的触发器。 我们先了解 cron 参数:

参数

说明

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)

指定时区

使用示例如下:

Job Stores(作业存储器)

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

Executors(执行器)

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

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

5 总结

APScheduler为Python开发者提供了一个强大的定时任务调度框架,使得在Python中实现定时任务变得非常简单和高效。掌握APScheduler的使用将为我们的项目和程序带来很大的便利。

而且在WEB应用中也非常广泛。如果你想在 Django 中运行,可以考虑django_apscheduler,推荐使用自定义命令,在一个单独的专用进程中执行单个定时任务。而如果你想在 Flask 中使用 APScheduler ,这里也有一个非官方的插件Flask-APScheduler。

写到最后

感谢您的一路陪伴,用代码构建世界,一起探索充满未知且奇妙的魔幻旅程。如果您对Python编程技巧、好玩实用的开源项目、行业新知趣事和各类技术干货等充满兴趣,那么不要错过未来我为大家奉上的精彩内容!点击关注,让您的探索学习之旅更加丰富多彩,我们一同成长,一同前行!🚀💻📚

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python兴趣圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • 1 APScheduler 简介
    • 2 安装
    • 3 使用步骤
    • 4 基础组件
    • 5 总结
    • 写到最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档