python 新手学习 - 简单实用的 Python 周期任务调度工具

news2024/11/15 11:19:00

如果你想周期性地执行某个 Python 脚本,最出名的选择应该是 Crontab 脚本,但是 Crontab 具有以下缺点:

1.不方便执行秒级任务。
2.当需要执行的定时任务有上百个的时候,Crontab 的管理就会特别不方便。

还有一个选择是 Celery,但是 Celery 的配置比较麻烦,如果你只是需要一个轻量级的调度工具,Celery 不会是一个好选择。

在你想要使用一个轻量级的任务调度工具,而且希望它尽量简单、容易使用、不需要外部依赖,最好能够容纳 Crontab 的所有基本功能,那么 Schedule 模块是你的不二之选。

使用它来调度任务可能只需要几行代码,感受一下:

上面的代码表示每 10 分钟执行一次 job 函数,非常简单方便。你只需要引入 schedule 模块,通过调用 scedule.every(时间数).时间类型.do(job) 发布周期任务。

发布后的周期任务需要用 run_pending 函数来检测是否执行,因此需要一个 While 循环不断地轮询这个函数。

下面具体讲讲 Schedule 模块的安装和初级、进阶使用方法。

1.准备

开始之前,你要确保 Python 和 pip 已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细 Python 安装指南 进行安装。

(可选 1) 如果你用 Python 的目的是数据分析,可以直接安装 Anaconda:Python 数据分析与挖掘好帮手—Anaconda,它内置了 Python 和 pip.

(可选 2) 此外,推荐大家用 VSCode 编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南。

请选择以下任一种方式输入命令安装依赖:

  1. Windows 环境 打开 Cmd (开始 - 运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+ 空格输入 Terminal)。
  3. 如果你用的是 VSCode 编辑器 或 Pycharm,可以直接使用界面下方的 Terminal.

pip install schedule

2.基本使用

最基本的使用在文首已经提到过,下面给大家展示更多的调度任务例子:

可以看到,从月到秒的配置,上面的例子都覆盖到了。不过如果你想只运行一次任务的话,可以这么配:

(1)参数传递

如果你有参数需要传递给作业去执行,你只需要这么做:

(2)获取目前所有的作业

如果你想获取目前所有的作业:

(3)取消所有作业

如果某些机制触发了,你需要立即清除当前程序的所有作业:

(4)标签功能

在设置作业的时候,为了后续方便管理作业,你可以给作业打个标签,这样你可以通过标签过滤获取作业或取消作业。

(5)设定作业截止时间

如果你需要让某个作业到某个时间截止,你可以通过这个方法:

截止日期之后,该作业将无法运行。

立即运行所有作业,而不管其安排如何

如果某个机制触发了,你需要立即运行所有作业,可以调用 schedule.run_all() :

3.高级使用

(1)装饰器安排作业

如果你觉得设定作业这种形式太啰嗦了,也可以使用装饰器模式:

(2)并行执行

默认情况下,Schedule 按顺序执行所有作业。其背后的原因是,很难找到让每个人都高兴的并行执行模型。

不过你可以通过多线程的形式来运行每个作业以解决此限制:

(3)日志记录

Schedule 模块同时也支持 logging 日志记录,这么使用:

效果如下:

DEBUG:schedule:Running all 1 jobs with 0s delay in between
DEBUG:schedule:Running job Job(interval=1, unit=seconds, do=job, args=(), kwargs={})
Hello, Logs
DEBUG:schedule:Deleting all jobs

(4)异常处理

Schedule 不会自动捕捉异常,它遇到异常会直接抛出,这会导致一个严重的问题:后续所有的作业都会被中断执行,因此我们需要捕捉到这些异常。

你可以手动捕捉,但是某些你预料不到的情况需要程序进行自动捕获,加一个装饰器就能做到了:

这样,bad_task 在执行时遇到的任何错误,都会被 catch_exceptions 捕获,这点在保证调度任务正常运转的时候非常关键。

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

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

相关文章

如何在 JavaScript 中实现任务队列

任务队列的概念 任务队列就是存放任务的队列,队列中的任务都严格按照进入队列的先后顺序执行。 在前一条任务执行完毕后,立即执行下一条任务,直到任务队列清空。 任务队列的基本执行流程如下: 设置任务队列并发数; …

编程导航算法通关村——算法基础

目录 1. 时间复杂度 1.1. 时间复杂度概念 1.2. 几种常见的阶 1.2.1. 常数阶 O(1) 1.2.2. 线性阶 O(n) 1.2.3. 平方阶 (n) 1.2.4. 对数阶 O(logn) 2. 最坏情况和平均情况 3. 空间复杂度 1. 时间复杂度 1.1. 时间复杂度概念 当我们说算法的时间复杂度时,我们…

「完美世界」石昊被诓入至尊道场,修炼无敌道,打跑天仙书院弟子

Hello,小伙伴们,我是拾荒君。 《完美世界》这部国漫,在粉丝的翘首期盼中,终于迎来了第141集的更新。这一集的内容,对于喜欢石昊和至尊道场劫难的观众来说,可谓是扣人心弦,让人目不转睛。 在这一集中&#…

【node】使用 sdk 完成短信发送

实现效果 过程 流程比较复杂,加上需要实名认证,建议开发的时候先提前去认证号账号,然后申请模版也需要等认证。 源码 我看了新版的sdk用的代码有点长,感觉没必要,这边使用最简单的旧版的sdk。 https://github.com/…

【MySQL学习之基础篇】约束

文章目录 1. 概述2. 基础约束3. 外键约束3.1. 介绍3.2. 外键的添加3.3. 外键删除和更新行为 1. 概述 概念: 约束是作用于表中字段上的规则,用于限制存储在表中的数据。     目的: 保证数据库中数据的正确、有效性和完整性。 分类&#x…

HHDESK个性化脚本功能

HHDESK可以把脚本配置在对话框中,生成按钮,便捷操作。 在界面下方的脚本框中,点击“”,选择新建; 随后在弹出框内填写名称及脚本,按需求选择填写参数,及运行过程中是否弹出参数框;…

Vue3-14- 【v-for】循环数组-解构的操作

说明 v-for 在遍历数组的时候,可以使用解构的语法,直接将数组中对象元素的属性解构出来, 从而实现直接使用对象属性值的效果。语法格式 : v-for"({属性名1,属性名2},索引变量名) in 数组名"具体的使用请看代码&#xf…

活动预告 | 微盟技术沙龙 - Elasticsearch 在微盟的实践 12/21/2023

微盟技术沙龙 「微盟技术沙龙」是由微盟研发中心发起并联合各方小伙伴为开发者举办的系列技术沙龙,从用户,产品,技术等方面与开发者进行交流。 微盟技术沙龙关注开发者在实际应用中遇到的问题。提供最真实的干货,以技术会友&…

北京通用人工智能研究院提出了首个三维世界中的具身多任务多模态的通才智能体 LEO

想要迈向通用人工智能,必须要构建一个能够理解人类生活的真实世界,并掌握丰富技能的具身通用智能体。 今年以来,以 GPT-4 (V)[1]、LLaVA [2]、PALM-E [3] 等为代表的多模态大语言模型(Multi-modal Large Language Model&#xff…

Qt 数据库QSqlDatabase使用记录

记录一些在QT中使用QSqlDatabase操作数据库时,需要注意的地方 创建数据库 bool CDBOperatorAbstract::_openDBConn(CDatabaseConfig config) {QWriteLocker locker(&m_locker);QSqlDatabase db;if(QSqlDatabase::contains(m_connectionName)){db QSqlDatabas…

随机森林1(了解整体知识架构)

很多人想学习或者了解随机森林,查到的资料都是先讲熵,再讲决策树,然后再讲随机森林,前面坚持不下来或者一个地方没理解透彻,导致无法向下学习,而且公式讲解不够清晰,例子不够详细,很…

AI+高通量生物数据构造精准靶向肿瘤的人工合成病毒

David-Baker 创新点: - 学科交叉 - 从基础到应用 - 合成生物AI模型

孟德尔随机化+WGCNA+预后模型,7+轻松get

今天给同学们分享一篇生信文章“Exploring the causality and pathogenesis of systemic lupus erythematosus in breast cancer based on Mendelian randomization and transcriptome data analyses”,这篇文章发表在Front Immunol期刊上,影响因子为7.3…

Selenium+Python实现自动化测试,看完就会。。。

安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回…

CMake创建wxWidgets桌面应用

CMake创建wxWidgets桌面应用 环境 Windows 10CMake 3.28MinGW 64 8.1wxWidgets 3.2.4 wxWidgets GitHub: https://github.com/wxWidgets/wxWidgets/文档地址: https://docs.wxwidgets.org/stable/page_topics.html下载地址:https://www.wxwidgets.org/downloads…

后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例

接上篇 使用MyBatis配置Mapper实现增删改查 1.Service的基本作用 Service在代码中的的作用是调用Mapper、被Controller调用。是后端项目中非常重要的组件。 用于设计业务流程、业务逻辑,以保障数据的完整性、有效性、安全性。 2. Service使用举例——“添加相册”…

生物信息学分析领域领先的特制语言环境NGLess(Next Generation Less)介绍、安装配置和详细使用方法

介绍 NGLess(Next Generation Less)是一种用于生物信息学分析的领先的领域特定语言(DSL)。它旨在简化和加速NGS(Next Generation Sequencing)数据的分析过程。NGLess具有清晰的语法和功能,使用户…

宝塔面板快速搭建本地网站结合内网穿透实现远程访问【无需公网IP】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

OpenAI | GPT-4.5“泄露”,价格离谱!

OpenAI “泄露”了GPT-4.5👀 最近,OpenAI “泄露”了备受期待的 GPT-4.5 这个最新的模型带来了跨语言、音频、视觉、视频和3D的多模态功能,开启了复杂推理和跨模态理解的新篇章。 新模型系列包括: GPT-4.5:标准版&…

LeetCode977有序数组的平方两种方法实现(java实现)

今天来分享的是LeetCode977有序数组的平方的实现方法,我们先来看下题目: 提示:我们在读题的时候一定要仔细,注意题目给定的条件是有序数组。 方法1:我们在看到题目的第一时间是无非是将数组每个元素进行平方&#xff…