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 django 增删改查操作 数据库Mysql
Jul 27 Python
浅谈numpy数组的几种排序方式
Dec 15 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
Python3实现购物车功能
Apr 18 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
Python下简易的单例模式详解
Apr 08 Python
python urllib爬虫模块使用解析
Sep 05 Python
Python中常用的高阶函数实例详解
Feb 21 Python
django 前端页面如何实现显示前N条数据
Mar 16 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
python为什么会环境变量设置不成功
Jun 23 Python
python中的时区问题
Jan 14 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php 不同编码下的字符串长度区分
2009/09/26 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
2018/11/08 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
Python实现不规则图形填充的思路
2020/02/02 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
大学生四年生活自我鉴定
2013/11/21 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
2014年文员工作总结
2014/11/18 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
校运会新闻稿
2015/07/17 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python