python 实现定时任务的四种方式


Posted in Python onApril 01, 2021

用Python实现定时任务

有些时候我们需要每隔一段时间就要执行一段程序,或者是往复循环执行某一个任务。比如博主在上篇文章讲的爬虫一样,在实现对某个目标进行在线爬取的话,也需要用到实时任务。

用Python实现定时任务的四种方法

  • while True: + sleep()
  • threading.Timer定时器
  • 调度模块schedule
  • 任务框架APScheduler

定时要完成的Task(简单定义下)

import datetime
def Task():
  now = datetime.datetime.now()
  ts = now.strftime('%Y-%m-%d %H:%M:%S')
  print(ts)

利用while True: + sleep()实现定时任务

第一个想到的肯定就行while:true + sleep组合了吧,简单粗暴,实现如下

def loopMonitor():
  while True:
    Task()
    # 3s检查一次
    time.sleep(3)

这种方法的缺点是只能实现同步任务,无法执行异步任务

利用threading.Timer定时器实现定时任务

from threading import Timer
def timerMonitor():
  Task()
  t = Timer(3, timerMonitor)
  t.start()

出现的问题是,运行次数过多时,会出现报错:Pyinstaller maximum recursion depth exceeded Error Resolution
达到最大递归深度,然后想到的是修改最大递归深度

sys.setrecursionlimit(100000000)

但是运行到达到最大CPU时,python会直接销毁程序,凉凉0.0

利用调度模块schedule实现定时任务

schedule是一个第三方轻量级的任务调度模块,可以按照秒,分,小时,日期或者自定义事件执行时间
如果想执行多个任务,也可以添加多个task
代码见下

import schedule
def scheduleMonitor():
  # 清空任务
  schedule.clear()
  # 创建一个按3秒间隔执行任务
  schedule.every(3).seconds.do(Task)
  # 创建一个按2秒间隔执行任务
  schedule.every(2).seconds.do(Task)
  while True:
    schedule.run_pending()

但是他依然需要和while Ture配合使用,而且占用的CPU也比其他几种多的多。

利用任务框架APScheduler实现定时任务

APScheduler是Python的一个定时任务框架,用于执行周期或者定时任务,该框架不仅可以添加、删除定时任务,还可以将任务存储到数据库中,实现任务的持久化,使用起来非常方便。

from apscheduler.schedulers.blocking import BlockingScheduler
def APschedulerMonitor():
  # 创建调度器:BlockingScheduler
  scheduler = BlockingScheduler()
  scheduler.add_job(Task, 'interval', seconds=3, id='test_job1')
  # 添加任务,时间间隔5S
  scheduler.add_job(Task, 'interval', seconds=5, id='test_job2')
  scheduler.start()

总结

1:循环+sleep方式可以用来做简单测试。
2:timer可以实现异步定时任务。
3:schedule可以定点定时执行,但是仍然需要while Ture配合,而且占用内存大。
4:APScheduler框架更加强大,可以直接在里面添加定点与定时任务,无可挑剔。
所以,用谁不用我说了吧QAQ

以上就是python 实现定时任务的四种方式的详细内容,更多关于python 实现定时任务的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python类继承用法实例分析
May 27 Python
python中range()与xrange()用法分析
Sep 21 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
通过源码分析Python中的切片赋值
May 08 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
Python中shapefile转换geojson的示例
Jan 03 Python
python retrying模块的使用方法详解
Sep 25 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 Python
python读取pdf格式文档的实现代码
Python中使用Lambda函数的5种用法
Apr 01 #Python
python 实现mysql自动增删分区的方法
Apr 01 #Python
pygame面向对象的飞行小鸟实现(Flappy bird)
如何用python插入独创性声明
python OpenCV学习笔记
python基于OpenCV模板匹配识别图片中的数字
You might like
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
php分页查询的简单实现代码
2017/03/14 PHP
Laravel下生成验证码的类
2017/11/15 PHP
海量经典的jQuery插件集合
2010/01/12 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
python显示天气预报
2014/03/02 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
python统计字符的个数代码实例
2020/02/07 Python
tensorflow 实现数据类型转换
2020/02/17 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
django下创建多个app并设置urls方法
2020/08/02 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
师范生实习的个人自我鉴定
2013/10/20 职场文书
工商学院毕业生自荐信
2013/11/12 职场文书
财务部绩效考核方案
2014/05/04 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
销售内勤岗位职责
2015/02/10 职场文书
小学副班长竞选稿
2015/11/21 职场文书
基于Python实现西西成语接龙小助手
2022/08/05 Golang