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映射列表实例分析
Jan 26 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 Python
python3库numpy数组属性的查看方法
Apr 17 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 Python
使用Python实现画一个中国地图
Nov 23 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
Python用户自定义异常的实现
Dec 25 Python
python 如何获取页面所有a标签下href的值
May 06 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php学习笔记之 函数声明
2011/06/09 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
js变量以及其作用域详解
2020/07/18 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
对numpy中的where方法嵌套使用详解
2018/10/31 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
搞笑获奖感言
2014/01/30 职场文书
部队党性分析材料
2014/02/16 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL
Python安装使用Scrapy框架
2022/04/12 Python