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实现的一个自动售饮料程序代码分享
Aug 25 Python
python2.7的编码问题与解决方法
Oct 04 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
详解用Python为直方图绘制拟合曲线的两种方法
Aug 21 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
python缩进长度是否统一
Aug 02 Python
python如何在word中存储本地图片
Apr 07 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
基于mysql的论坛(6)
2006/10/09 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
JQuery实现可直接编辑的表格
2015/04/16 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
python杀死一个线程的方法
2015/09/06 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
django2.0扩展用户字段示例
2019/02/13 Python
pandas 数据类型转换的实现
2020/12/29 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
Java工程师面试集锦之Spring框架
2013/06/16 面试题
init进程的作用
2012/04/12 面试题
员工自我鉴定
2013/10/09 职场文书
应届大学生的推荐信
2013/11/20 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
硕士生工作推荐信
2014/03/07 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫