当前位置: 首页 > news >正文

【Python】 Python Schedule 模块:轻量级的定时任务调度库


我听见有人猜
你是敌人潜伏的内线
和你相知多年
我确信对你的了解
你舍命救我画面
一一在眼前浮现
司空见惯了鲜血
你忘记你本是娇娆的红颜
感觉你我彼此都那么依恋
                     🎵 许嵩《内线》


在日常开发中,我们经常需要执行一些定时任务,例如定时备份数据库、定时发送邮件提醒、定时抓取数据等。在 Python 中,虽然可以使用传统的 threading 模块结合 time.sleep() 来实现简单的定时任务,但它的灵活性和可读性较差。如果你需要一个轻量级且易于使用的调度库,那么 schedule 模块将是一个不错的选择。

1. 什么是 schedule?

schedule 是一个非常简洁、轻量的 Python 库,它的主要功能就是用于设置定时任务。通过几行代码,我们就可以实现定时执行函数,并且支持多种时间间隔(如秒、分钟、小时、天、周等),同时其 API 设计非常直观,适合快速开发应用中的简单调度任务。

2. 安装 schedule

在开始之前,我们首先需要安装这个模块。你可以使用 pip 来安装:

pip install schedule

安装完成后,你就可以在你的 Python 代码中引入 schedule 模块,并开始使用它来调度任务。

3. 基本使用

schedule 的使用非常简单,核心的思想是通过 do() 方法来定义任务,然后用时间调度方法如 every() 来定义任务的执行频率。最后,通过 run_pending() 进行任务的检查与执行。

3.1 简单任务调度示例

下面是一个简单的例子,每隔 10 秒执行一次任务:

import schedule
import timedef job():print("任务执行中...")# 每隔 10 秒执行一次任务
schedule.every(10).seconds.do(job)while True:# 检查是否有任务需要执行schedule.run_pending()time.sleep(1)

在这个例子中,我们定义了一个 job() 函数,这个函数会被调度为每隔 10 秒执行一次。schedule.every(10).seconds.do(job) 用于设置任务的时间间隔,而 schedule.run_pending() 用于每次循环中检查并运行等待执行的任务。

3.2 多个任务调度

schedule 支持同时调度多个任务,下面是一个例子:

import schedule
import timedef job1():print("任务 1 执行中...")def job2():print("任务 2 执行中...")# 每 5 秒执行一次 job1
schedule.every(5).seconds.do(job1)# 每 10 秒执行一次 job2
schedule.every(10).seconds.do(job2)while True:schedule.run_pending()time.sleep(1)

在这个示例中,我们设置了两个任务,job1 每隔 5 秒执行一次,而 job2 每隔 10 秒执行一次。

4. 高级用法

除了简单的秒级调度,schedule 还支持基于分钟、小时、天、星期的调度,甚至还可以设置每天的特定时间点执行任务。

4.1 基于时间单位的调度

schedule 提供了丰富的时间单位来配置任务的调度,包括:秒(seconds)、分钟(minutes)、小时(hours)、天(days)、周(weeks)等。下面是一些常见用法:

import scheduledef job():print("任务执行中...")# 每 10 分钟执行一次
schedule.every(10).minutes.do(job)# 每小时执行一次
schedule.every().hour.do(job)# 每天执行一次
schedule.every().day.at("10:30").do(job)# 每周一执行一次
schedule.every().monday.do(job)
4.2 以特定时间间隔执行任务

除了固定的时间单位外,schedule 还支持按天或周的时间间隔执行任务。例如,你可以设置每隔 3 天执行一次任务,或者每隔两周的某天执行任务:

# 每隔 3 天执行一次
schedule.every(3).days.do(job)# 每两周的周三执行一次
schedule.every(2).weeks.on('wednesday').do(job)

5. 停止任务

在某些情况下,你可能需要停止特定的任务。可以通过 cancel_job() 来取消任务的调度。示例:

import scheduledef job():print("任务执行中...")# 设置任务
task = schedule.every(5).seconds.do(job)# 取消任务
schedule.cancel_job(task)

6. 完整示例

为了展示 schedule 的灵活性,我们来看一个更完整的示例。这个例子中会定时发送提醒,并在特定的时间执行备份任务:

import schedule
import timedef send_reminder():print("发送提醒邮件...")def backup_database():print("备份数据库...")# 每隔 30 分钟发送一次提醒
schedule.every(30).minutes.do(send_reminder)# 每天凌晨 2:00 备份数据库
schedule.every().day.at("02:00").do(backup_database)while True:schedule.run_pending()time.sleep(1)

7. 优缺点分析

优点:

轻量简单:schedule 的 API 非常直观,语法清晰易懂,适合简单任务的快速实现。
可读性高:代码逻辑清晰,极易维护,尤其适合小型应用或简单任务的调度。
灵活性好:支持基于秒、分钟、小时、天、周等多种时间单位的调度。
缺点:

不适合复杂任务:schedule 更偏向于小型、轻量的任务调度。如果需要更加复杂的调度逻辑(如分布式调度、大规模并发任务),可能需要使用更强大的调度库,例如 APScheduler。
依赖长时间运行:schedule 的调度依赖 Python 程序持续运行,因此不适合短命周期的脚本。

8. 总结

schedule 是一个轻量级的 Python 定时任务库,适合用于简单的定时任务调度。它的优势在于 API 简单直观,易于集成到小型项目中。如果你有简单的定时任务需求,可以尝试使用 schedule 模块,减少代码复杂度,同时提高任务的可读性与可维护性。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • docker 镜像站
  • Qt QLabel标签制作弹框效果,3s后缓慢自动消失
  • 如何在桌面同时展示多个窗口
  • Error hdl vendor backen is missing
  • 蒟蒻的尊严被打得一败涂地17
  • nginx基础配置
  • HTTP?HTTPS?HTTP2.0
  • 【GitHub】github clone远程仓库的时候一直失败
  • 【xilinx】O-RAN 无线电接口 - Vivado 2020.1 及更新工具版本的发行说明
  • fetch跨域请求数据的前端设置和后端php的header设置
  • 高性能web服务器--nginx
  • 【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task3:源大模型RAG实战(持续更新)
  • 【AI趋势8】具身智能
  • Leetcode 第 137 场双周赛
  • Python酷库之旅-第三方库Pandas(088)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • docker容器内的网络抓包
  • ES10 特性的完整指南
  • Facebook AccountKit 接入的坑点
  • HTML-表单
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Laravel 中的一个后期静态绑定
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Map集合、散列表、红黑树介绍
  • Spring-boot 启动时碰到的错误
  • TCP拥塞控制
  • Vue小说阅读器(仿追书神器)
  • 阿里云购买磁盘后挂载
  • 包装类对象
  • 从零开始的无人驾驶 1
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 复习Javascript专题(四):js中的深浅拷贝
  • 聊聊hikari连接池的leakDetectionThreshold
  • 微信支付JSAPI,实测!终极方案
  • 白色的风信子
  • ​【已解决】npm install​卡主不动的情况
  • ​插件化DPI在商用WIFI中的价值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #define
  • #vue3 实现前端下载excel文件模板功能
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (一)SvelteKit教程:hello world
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转载)hibernate缓存
  • .ai域名是什么后缀?
  • .Net IOC框架入门之一 Unity