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应用的教程
Apr 16 Python
python字典get()方法用法分析
Apr 17 Python
python实现简单点对点(p2p)聊天
Sep 13 Python
python编写微信远程控制电脑的程序
Jan 05 Python
pandas DataFrame数据转为list的方法
Apr 11 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Python中的Django基本命令实例详解
Jul 15 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
使用python绘制温度变化雷达图
Oct 18 Python
基于h5py的使用及数据封装代码
Dec 26 Python
Pytorch训练过程出现nan的解决方式
Jan 02 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
二进制交叉权限微型php类分享
2014/02/07 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
PHP守护进程实例
2015/03/06 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
Bootstrap列表组学习使用
2017/02/09 Javascript
如何使用angularJs
2017/05/08 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
python 获取等间隔的数组实例
2019/07/04 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
农村产权制度改革实施方案
2014/03/21 职场文书
外国人聘用意向书
2014/04/01 职场文书
读书月活动方案
2014/05/22 职场文书
城市创卫标语
2014/06/17 职场文书
社区两委对照检查材料
2014/08/23 职场文书
法英专业大学生职业生涯规划书范文
2014/09/22 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
Java并发编程必备之Future机制
2021/06/30 Java/Android
教你一步步实现一个简易promise
2021/11/02 Javascript