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 相关文章推荐
Django实现图片文字同时提交的方法
May 26 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
举例讲解Python中的list列表数据结构用法
Mar 12 Python
django轻松使用富文本编辑器CKEditor的方法
Mar 30 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
python实现移位加密和解密
Mar 22 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 Python
python使用opencv实现马赛克效果示例
Sep 28 Python
Python实现粒子群算法的示例
Feb 14 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 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书写安全的脚本代码
2012/02/05 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
python分析作业提交情况
2017/11/22 Python
Python闭包思想与用法浅析
2018/12/27 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
对Pytorch中nn.ModuleList 和 nn.Sequential详解
2019/08/18 Python
python实现文法左递归的消除方法
2020/05/22 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
电子商务个人自荐信
2013/12/12 职场文书
大学社团计划书
2014/05/01 职场文书
班级活动总结格式
2014/08/30 职场文书
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android