您现在的位置是:群英 > 开发技术 > Python语言
用Python怎样做定时任务?浅谈几种常见的实现方法
Admin发表于 2021-11-20 17:45:41151 次浏览

    这篇文章我们来了解一下用Python怎样做定时任务,定时任务还是比较适用的,下文介绍了几种常见的实现定时任务方法,文中示例介绍的很详细,感兴趣的朋友可以了解看看,下面让我们一起来学习一下吧!

1、定时任务

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

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

2、Python的定时任务

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

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

    来看一段代码:

import time
from datetime import datetime

def func():
    # 这个是定时任务要执行的ui/接口自动化方法
    pass

def 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 schedule
import time

# 定义一个执行方法
def job():
    print("I'm working...")

# 每10分钟执行一次job
schedule.every(10).minutes.do(job)
# 每小时执行一次job
schedule.every().hour.do(job)
# 每天10:30执行job
schedule.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实现定时任务的几种方法就介绍到这,本文代码仅供参考,需要的朋友可以了解看看,希望能对大家有帮助,想要了解更多python定时任务的内容,大家可以关注其它的相关文章。

文本转载自脚本之家

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: python定时任务
相关信息推荐
2022-05-16 17:16:44 
摘要:本文实例为大家分享了android实现在图标上显示数字的具体代码,供大家参考,具体内容如下效果图:动态显示当天的号数。主要代码如下:import android.content.context;imp
2022-01-26 18:39:44 
摘要:Eclipse创建java项目的操作是什么?一些刚解决Java的朋友,可能不是很了解如何在Eclipse创建java项目,对此本文有很详细的操作介绍给大家做参考,需要的朋友可以看看,下面跟随小编来学习一下吧。
2021-11-01 17:56:43 
摘要:这篇文章给大家分享的是PHP中的命名空间的相关内容 ,下文将会从简单的代码角度来解析一下命名空间的概念和使用,对大家学习和理解命名空间的使用有一定的帮助,感兴趣的朋友接下来一起跟随小编看看吧。
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部