千家信息网

Python定时任务的实现方法是什么

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,今天就跟大家聊聊有关Python定时任务的实现方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、定时任务定时任务,顾名思义: 定时执
千家信息网最后更新 2025年01月17日Python定时任务的实现方法是什么

今天就跟大家聊聊有关Python定时任务的实现方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1、定时任务

定时任务,顾名思义: 定时执行的任务,可以是一段bash命令,也可以是一个脚本文件。通常用于我们需要在特定时刻做事情。

举个例子: 每晚8点执行全业务场景接口自动化回归测试,又或者每隔20分钟去你家QQ农场偷菜!

2、Python的定时任务

如果是大中型公司,一定有对应的平台让大家接入。一般这样的平台的名字或者描述都是: 分布式任务调度平台这样的。再不济还有jenkins满足我们的需求~

想起博主以前"小时候"(刚工作的时候),公司既没有用jenkins,也没有这样的大平台可以接入。我是怎么做定时任务的呢?

来看一段代码:

import timefrom datetime import datetimedef func():    # 这个是定时任务要执行的ui/接口自动化方法    passdef main():    while True:      # 获取当前时间      now = datetime.now()      if now.hour == 20 and now.minute == 0:          # 当时间到达晚上8点0分,我们就开始跑自动化任务啦          print("任务开始执行")          func()      time.sleep(60)            if __name__ == "__main__":    main()

不知道现在是否还有人依然用着这样的方式定时执行自动化测试,既然都2021年了,那咱们还是先进点吧。那么定时任务在Python中要怎么做呢?接着看。

2.1 几种常见的方案

2.1.1 schedule

如果你只是上面提到的简单诉求,那我建议直接使用schedule库。这个库我个人感觉是小学生版本的升级版,对于我那种局限的sleep任务做了一些扩展:

  • 支持了按周期执行任务

  • 执行时间阅读起来更人性化

  • 还支持星期X执行

安装scheduler

pip install schedule

官网给出的例子

import scheduleimport time# 定义一个执行方法def job():    print("I'm working...")# 每10分钟执行一次jobschedule.every(10).minutes.do(job)# 每小时执行一次jobschedule.every().hour.do(job)# 每天10:30执行jobschedule.every().day.at("10:30").do(job)# 每个星期一执行一次schedule.every().monday.do(job)# 每个星期三的13:15执行一次schedule.every().wednesday.at("13:15").do(job)# 在每分钟的17秒执行一次schedule.every().minute.at(":17").do(job)while True:    # 进入schedule循环    schedule.run_pending()    time.sleep(1)

可以看出,api十分简单,语义也很清晰。基本可以满足我们的需求了~如果我们只是要定时去做某些事情的话,我想这个库非常human

2.1.2 Jenkins

这个工具相比大家都有所了解吧~jenkins是一个比较强大的软件了,它可以打通git/svn,也支持定时任务等。有着丰富的插件,比如邮件,是一套完整的CI/CD解决方案。对于任务的执行结果的记录,也是可追溯的。估计唯一的缺点就是,引入了额外的系统。可能本身我只是一个自动化测试框架,现在却要搭建一套jenkins

如果大家有代码改动->执行定时任务类似的需求,又需要完善的权限控制系统的话,那jenkins会是你的不二选择。

2.1.3 Celery

我对这家伙了解的不太多,但python+celery仿佛成了一个固定搭配。不知道我理解的对不对:

celery是一个任务队列,你可以制定好任务执行的规则,放入队列中,会有专门的消费端来帮你执行这些任务。

说到这里就不得不提到持久化了~

2.2 题外话之持久化

什么是持久化呢?通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)

我们可以把数据放到文件里,也可以放到数据库(实际上也是磁盘里)进行持久性保存。

这样做的目的: 数据可以存储,下次也还能拿到这些数据。这里面的内容太多了,打算后面再开一节来讲。

我们在Python里面的变量啊,这些数据都是存放在内存当中的,所以我们刚才的schedule是不支持持久化的。(也可能是我没研究到)

jenkins支持吗?他是支持的,你想,你建立一个项目,里面有一些job的配置,什么时候执行,执行了干嘛,最后保存。

上述就是一个持久化的过程。

你保存了数据以后,下次能够获取到这个项目的任务信息,也就是说你哪怕重启了jenkins,任务依然存在。

说明任务本身作为了一条数据,持久地保存了起来。

2.2.1 ApScheduler

"APScheduler是一个Python库,可让您安排稍后要执行的Python代码,只需一次或定期执行。您可以根据您添加新的作业或删除旧的旧作业。如果您在数据库中存储工作,他们还将存活调度程序重新启动并保持状态。重新启动调度程序时,它将运行它在脱机1时应该运行的所有作业。"

这是摘自ApScheduler官网的介绍,总体来说它支持对任务的增删改查(持久化),也能很好地支撑定时任务的执行。它相对来说比较轻量,不像celery那么复杂,也不像schedule那么简陋。由于我们不打算引入jenkins,所以总体来说,ApScheduler算得上是咱们执行定时任务的不二之选了。

看完上述内容,你们对Python定时任务的实现方法是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

任务 数据 支持 自动化 方法 内容 平台 代码 只是 就是 数据库 时间 星期 需求 作业 测试 调度 例子 公司 内存 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 sap服务器数据库 数据库开发八股文 网络技术专业怎么实习 网络安全 从业年龄 我的世界pe端服务器怎么做 华为手机偶尔出现无法连接服务器 埋点日志怎么采集到服务器 软件开发哪家好 聚顶科技 网络正常开票软件连接服务器失败 湖州企业软件开发项目 上海岚辉网络技术 先发互联网科技有限公司 万方数据库整改了吗 计算机网络技术属于哪个 江苏软件开发咨询报价 察觉钢琴谱软件开发 内部服务器错误 500 软件工程算计算机网络技术类 数据库如何分区 魔兽世界 十区服务器 护苗网络安全课程 扫黄打非 数据库对数字自动生成排名 西青区项目网络技术不二之选 网络安全管理员工生日礼物 互联网科技公司属于哪一种行业 银行招聘软件开发人员看重什么 关于网络安全的主题班会设计 中国常用的经济类数据库有哪些 学计算机网络技术要不要考级 服务器证书无效怎么办
0