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 multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
Python的字典和列表的使用中一些需要注意的地方
Apr 24 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
Python中的字符串操作和编码Unicode详解
Jan 18 Python
pandas groupby 分组取每组的前几行记录方法
Apr 20 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
python实现五子棋小游戏
Mar 25 Python
python range实例用法分享
Feb 06 Python
python3 logging日志封装实例
Apr 08 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
PHP错误提示的关闭方法详解
2013/06/23 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
js arguments对象应用介绍
2012/11/28 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
python linecache 处理固定格式文本数据的方法
2019/01/08 Python
线程同步的方法
2016/11/23 面试题
网吧消防安全制度
2014/01/28 职场文书
分层教学实施方案
2014/03/19 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
领导参观欢迎词
2015/01/26 职场文书
Python中的tkinter库简单案例详解
2022/01/22 Python