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实现bitmap数据结构详解
Feb 17 Python
Python中的Numpy入门教程
Apr 26 Python
Python中使用select模块实现非阻塞的IO
Feb 03 Python
简单介绍Python中的try和finally和with方法
May 05 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
Python一行代码实现快速排序的方法
Apr 30 Python
python生成特定分布数的实例
Dec 05 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
python产生模拟数据faker库的使用详解
Nov 04 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
python中slice参数过长的处理方法及实例
Dec 15 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 date函数参数详解
2006/11/27 PHP
php中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
input 输入框内的输入事件详细分析
2010/03/17 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
js类定义函数时用prototype与不用的区别示例介绍
2014/06/10 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
仿京东快报向上滚动的实例
2017/12/13 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
kali中python版本的切换方法
2019/07/11 Python
实现Python与STM32通信方式
2019/12/18 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
成人教育自我鉴定
2013/11/01 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
厨师长岗位职责
2014/03/02 职场文书
党员政治学习材料
2014/05/14 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
师德师风事迹材料
2014/12/20 职场文书
java解析XML详解
2021/07/09 Java/Android