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实现多线程采集的2个代码例子
Jul 07 Python
python查找指定具有相同内容文件的方法
Jun 28 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
Python实现的径向基(RBF)神经网络示例
Feb 06 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
Python  unittest单元测试框架的使用
Sep 08 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
深入学习python多线程与GIL
Aug 26 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
Jupyter notebook如何实现指定浏览器打开
May 13 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中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
python读取文件名并改名字的实例
2019/01/07 Python
代码详解django中数据库设置
2019/01/28 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
通过cmd进入python的步骤
2020/06/16 Python
python如何修改文件时间属性
2021/02/05 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
运动会通讯稿200字
2014/02/16 职场文书
离婚案件上诉状
2015/05/23 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
python常见的占位符总结及用法
2021/07/02 Python