轻松上手Python Schedule模块,实现高效定时任务

news2025/1/12 1:50:58

🍀 前言

博客地址:

  • CSDN:https://blog.csdn.net/powerbiubiu

👋 简介

Schedule是Python中的一个轻量级进程调度程序库,用于安排任务以指定的时间间隔定期运行

📖 正文

1 Schedule的介绍

1.1 安装

pip install schedule

1.2 语法

Schedule.every(interval).[timeframe].do(function)
参数:

  • interval:任意整数,表示数量;
  • timeframe:日期类型,入:时分秒;
  • function:需要执行的函数。

2 Schedule的使用

2.1 基本使用
from datetime import datetime

import schedule
import time

def job(name: str) -> None:
    now_time = datetime.now()
    print(f"{now_time} - Hello {name}")

if __name__ == '__main__':
    name = 'Python'
    schedule.every(2).seconds.do(job, name)
    while True:
        schedule.run_pending()  # 运行所有可以运行的任务
        time.sleep(1)

image.png
通过代码和执行结果可以看出,通过调度器,每两秒执行一次job方法,并传入参数。

2.2 任务调度
# 每2秒执行一次任务
schedule.every(2).seconds.do(job, name)
# 每10分钟执行一次任务
schedule.every(10).minutes.do(job, name)
# 每1小时执行一次任务
schedule.every(1).hour.do(job, name)
# 每天9:30分的时候执行一次任务
schedule.every().day.at("9:30").do(job, name)
# 每1-5天的时候执行一次任务
schedule.every(1).to(5).days.do(job, name)
# 每周一执行一次任务
schedule.every().monday.do(job, name)
# 每周三的9:30分钟执行一次任务
schedule.every().wednesday.at("9:30").do(job, name)

3 使用装饰器

3.1 装饰器介绍

@repeat(job, *args, **kwargs)
参数:

  • job:任务定时;
  • *args:参数
  • **kwargs:参数
3.2 装饰器调度

通过装饰器,我们可以指定任务的定时以及被装饰方法的参数。实际上装饰器实现了job.do(function,*args,**kwargs),就等于every(2).seconds.do(job, name),只是通过装饰器把every(2).seconds当参数传入了而已。

from schedule import repeat, every, run_pending

@repeat(every(2).seconds, 'World')
def job(name: str) -> None:
    now_time = datetime.now()
    print(f"{now_time} - Hello {name}")
    
if __name__ == '__main__':
    while True:
        run_pending()  # 运行所有可以运行的任务
        time.sleep(1)

image.png

4 取消定时器

import schedule
i = 0

def job(name: str) -> None:
    global i
    i += 1
    now_time = datetime.now()
    print(f"{now_time} - Hello {name}")
    if i == 5:
        schedule.clear()
        exit(0)

if __name__ == '__main__':
    name = 'Python'
    schedule.every(2).seconds.do(job, name)
    while True:
        schedule.run_pending() 
        time.sleep(1)

通过clear()方法可以清除定时任务,在job方法中,模拟执行5次后停止任务执行,这里通过exit(0)退出python程序,不然调度任务不执行了,但python程序还在执行。

5 运行任务到某时刻

通过until设置任务执行截至时间,任务运行则通过程序启动时开始执行。

from datetime import datetime, timedelta, time
import schedule


def job(name: str) -> None:
    now_time = datetime.now()
    print(f"{now_time} - Hello {name}")


if __name__ == '__main__':
    # 今天14:45停止
    schedule.every().second.until('14:45').do(job,name)
    # 2024-12-31 23:59:59停止
    schedule.every().second.until('2024-12-31 23:59:59').do(job,name)
    # 8小时后停止
    schedule.every().second.until(timedelta(hours=8)).do(job,name)
    # 今天23:59:59停止
    schedule.every().second.until(time(23, 59, 59)).do(job,name)
    # 2024-12-31 23:59:59停止
    schedule.every().second.until(datetime(2024, 12, 31, 23, 59, 59)).do(job,name)
    while True:
        schedule.run_pending()

✏ 总结

schedule的任务调度是串行的,如果各个任务之间时间不冲突,是没问题的;如果时间有冲突的话,则会串行的执行命令,可以通过多线程或多进程的方法避免该问题。

💖 欢迎关注我的公众号

在这里插入图片描述

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

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

相关文章

详解MySQL C API 相关接口(大白话就是:MySQL的c语言怎么写)

文章目录 1、C API 官方文档2、初始化 MYSQL3、连接 MySQL设置连接字符集(使得客户端编码方式匹配) 4、下发 mysql 指令5、获取 mysql 查询结果(保存起来)获取行与列遍历存储结果 6、释放 MYSQL\_RES 对象7、关闭 MySQL 连接8、总结 1、C API 官方文档 …

CSS中的 5 类常见伪元素详解!

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合…

【运维自动化-配置平台】如何通过模板创建集群和模块

通过【每天掌握一个功能点】配置平台如何创建业务机拓扑(集群-模块)我们知道了直接创建集群和模块的操作方法,直接创建的方式适合各集群模块都相对独立的场景,那大量的、标准规范的集群模块如何快速创建呢,这里就引入了…

企业实施定制鞋厂ERP软件需要注意哪些问题?

企业实施定制鞋厂ERP软件是个复杂的管理系统工程,为了成功地为企业定制实施ERP软件,需要注意和解决几个关键的问题: . 确立ERP系统实施和定制的决策者;. 做好前期咨询与调研工作;. 做好系统产品或项目迭代规划&#x…

Linux安装Docker的多版本PHP和多版本MySQL共存

1: 先安装docker 安装完后执行,权限设置 sudo usermod -aG docker $USER或者sudo usermod -aG docker kentrl#添加当前用户到Docker用户组中 sudo newgrp docker#更新用户组数据,必须执行否则无效 sudo systemctl restart docker 先看目录结构: 2:按照目录结构挂载磁盘,…

ZDOCK linux 下载(无需安装)、配置、使用

ZDOCK 下载 使用 1. 下载1)教育邮箱提交申请,会收到下载密码2)选择相应的版本3)解压 2. 使用方法Step 1:将pdb文件处理为ZDOCK可接受格式Step 2:DockingStep 3:创建所有预测结构 1. 下载 1&…

Java | Leetcode Java题解之第43题字符串相乘

题目: 题解: class Solution {public String multiply(String num1, String num2) {if (num1.equals("0") || num2.equals("0")) {return "0";}int m num1.length(), n num2.length();int[] ansArr new int[m n];for…

python爬虫学习------scrapy第二部分(第三十天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

C# GetField 方法应用实例

目录 关于 C# Type 类 GetField 方法应用 应用举例 心理CT设计题 类设计 DPCT类实现代码 小结 关于 C# Type 类 Type表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。调用 t…

制造企业看重的OEE,到底是怎么回事?

OEE(Overall Equipment Effectiveness,全局设备效率)是一个用于评估生产设备性能和效率的指标,它通过综合考虑设备的可用率、性能率和良品率等因素,来评估设备的整体表现和生产效果。 其计算公式为: OEE …

好用的在线客服系统PHP源码(开源代码+终身使用+安装教程) 制作第一步

创建一个在线客服系统是一个涉及多个步骤的过程,包括前端界面设计、后端逻辑处理、数据库设计、用户认证、实时通信等多个方面。以下是使用PHP制作在线客服系统的第一步:需求分析和系统设计。演示:ym.fzapp.top 第一步:需求分析 确…

Oceanbase体验之(二)Oceanbase集群的搭建(社区版4.2.2)

资源规划 3台observer CPU:4C及以上 内存:32G及以上 硬盘操作系统500G 存储盘1T及以上 虚拟机可以直接划分,物理机需要提前规划好资源 一、上传oceanbase安装包 登录ocp选择软件包管理 上传Oceanbase软件包(软件包获取路径 官网免费下载社…

双向链表介绍

带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”。哨兵位存在的意义:避免链表出现死循环。 双向链表的结构:数据指向下一个节点的指针指向前一个节点的指针 typedef in…

Postman - 设置变量

场景: 比如你接口都有权限,访问需要每调一个接口都手动放token的值,这个时候就可以搞个全局的变量,只设置一次就可以了 1、设置变量 Environments -> Globals - > 设置key 、value 2、使用变量 {{你得变量名-key}} 3…

[Linux][多线程][四][线程同步][POSIX信号量][环形队列生产者消费者模型][线程池]

目录 1.POSIX信号量1.基本概念2.为什么要有信号量? --> 提高效率3.信号量的PV操作4.PV操作必须是原子操作5.申请信号量失败被挂起等待6.理解信号量大致结构 2.信号量函数1.初始化2.销毁3.等待信号量 -- 申请信号量 --> P()4.发布信号量 -- 释放信号量 --> V() 3.基于…

LeetCode 2739. 总行驶距离

题目链接https://leetcode.cn/problems/total-distance-traveled/?envTypedaily-question&envId2024-04-25 简单题,看代码思考一下即可理解 class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int res 0;while (mainTank >…

探索直播+电商系统中台架构:连接消费者与商品的智能纽带

随着直播电商的崛起,电商行业进入了全新的智能时代。直播形式的互动性和即时性为消费者提供了全新的购物体验,而电商平台则为商品的展示、销售和配送提供了强大的支持。在这一背景下,直播电商系统中台架构成为了连接消费者与商品的智能纽带&a…

模块化 手写实现webpack

模块化 common.js 的导入导出方法: require \ export 和 module.exports export 和 module.export nodejs 内存1.4G -> 2.8G cjs ESModule 主要区别: require属于动态类型:加载执行 同步 esmodul是静态类型:引入时并不会真的去…

Oracle 21 C 安装详细操作手册,并配置客户端连接

Oracle 21 C 安装详细操作手册 Win 11 Oracle 21C 下载: Database Software Downloads | Oracle 中国 云盘共享 链接:https://pan.baidu.com/s/12XCilnFYyLFnSVoU_ShaSA 提取码:nfwc Oracle 21C 配置与登陆: 开始菜单 NetMa…

一线实战,一次底层超融合故障导致的Oracle异常恢复

背景概述 某客户数据由于底层超融合故障导致数据库产生有大量的坏块,最终导致数据库宕机,通过数据抢救,恢复了全部的数据。下面是详细的故障分析诊断过程,以及详细的解决方案描述: 故障现象 数据库宕机之后&#xff0c…