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下函数参数的传递(参数带星号的说明)
Sep 19 Python
python实现多线程的两种方式
May 22 Python
一张图带我们入门Python基础教程
Feb 05 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
对python requests的content和text方法的区别详解
Oct 11 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
基于pycharm实现批量修改变量名
Jun 02 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
python多线程爬取西刺代理的示例代码
Jan 30 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中filter_input函数用法分析
2014/11/15 PHP
php实现生成code128条形码的方法详解
2017/07/19 PHP
javascript 全角转换实现代码
2009/07/17 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
圣诞节Merry Christmas给博客添加浪漫的下雪效果基于jquery实现
2012/12/27 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
Python实现购物车购物小程序
2018/04/18 Python
python实现三维拟合的方法
2018/12/29 Python
django celery redis使用具体实践
2019/04/08 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
Django之路由层的实现
2019/09/09 Python
python实现飞船大战
2020/04/24 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
机械电子工程毕业生自荐信
2013/11/23 职场文书
三下乡活动方案
2014/01/31 职场文书
教师批评与自我批评
2014/10/15 职场文书
护士求职自荐信范文
2015/03/04 职场文书
子女赡养老人协议书
2016/03/23 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript
java代码实现空间切割
2022/01/18 Java/Android