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采用socket模拟TCP通讯的实现方法
Nov 19 Python
Python中eval带来的潜在风险代码分析
Dec 11 Python
TensorFlow实现Batch Normalization
Mar 08 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
Python根据已知邻接矩阵绘制无向图操作示例
Jun 23 Python
Sanic框架安装与简单入门示例
Jul 16 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
Python基础之Socket通信原理
Apr 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
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
php除数取整示例
2014/04/24 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
javascript window.opener的用法分析
2010/04/07 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
Python下载指定页面上图片的方法
2016/05/12 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python装饰器用法实例总结
2018/02/07 Python
Python列表切片操作实例总结
2019/02/19 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Python datetime 如何处理时区信息
2020/09/02 Python
python设置中文界面实例方法
2020/10/27 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
秋游活动策划方案
2014/02/16 职场文书
制作部班长职位说明书
2014/02/26 职场文书
酒店端午节活动方案
2014/08/26 职场文书
婚庆答谢词
2015/01/04 职场文书
如何写通讯稿
2015/07/22 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js