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之for循环语句
Oct 02 Python
Python多线程编程简单介绍
Apr 13 Python
pandas中Timestamp类用法详解
Dec 11 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
Dec 10 Python
对python中dict和json的区别详解
Dec 18 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
在python里创建一个任务(Task)实例
Apr 25 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 Python
看看如何用Python绘制小米新版天价logo
Apr 20 Python
python使用pywinauto驱动微信客户端实现公众号爬虫
May 19 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
hadoop常见错误以及处理方法详解
2013/06/19 PHP
Memcached常用命令以及使用说明详解
2013/06/27 PHP
php生成图片验证码
2015/06/09 PHP
php实现简单的上传进度条
2015/11/17 PHP
PHP仿微信发红包领红包效果
2016/10/30 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
python 初始化一个定长的数组实例
2019/12/02 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
信息管理应届生求职信
2014/03/07 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
学校通报表扬范文
2015/05/04 职场文书
2015年国庆节寄语
2015/08/17 职场文书
django上传文件的三种方式
2021/04/29 Python