python 实现定时任务的四种方式
作者:zjlwdqca 发布时间:2023-06-28 14:37:27
目录
用Python实现定时任务
用Python实现定时任务的四种方法
利用while True: + sleep()实现定时任务
利用threading.Timer定时器实现定时任务
利用调度模块schedule实现定时任务
利用任务框架APScheduler实现定时任务
总结
用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
来源:https://blog.csdn.net/zjlwdqca/article/details/115358747
猜你喜欢
- 代码如下:<% '--------定义部份------------------ Dim XH_P
- PHP的类是单一继承模式,也就是每个类只能继承一个父类(基类)。但有时需要引入更多通用(共用)的方法,同时这些方法又不适合集成到基类。那么这
- 在mysql网站时拿到的rpm包只能用root安装,不支持relocate用源码安装后./configure --prefix=/home/
- 使用xmlhttp中的getResponseHeader 从响应信息中获取指定的http头strValue = oXML
- 最近碰到一个mysql5数据库的问题。就是一个标准的servlet/tomcat网络应用,后台使用mysql数据库。问题是待机一晚上后,第二
- 互联网是一个飞速发展的行业,任何的止步不前都会导致被淘汰,只是时间早晚的问题,所以一个公司的学习与创新能力是非常重要的,特别是对于一个年轻的
- 文本框 textarea 限制输入文字个数的的javascript代码,我们经常在评论留言页面我们需要在客户端限制访客的留言长度,当然最好我
- 简单低级的爬虫速度快,伪装度低,如果没有反爬机制,它们可以很快的抓取大量数据,甚至因为请求过多,造成服务器不能正常工作。而伪装度高的爬虫爬取
- 前言React核心的单向数据流、一切皆数据的state、不会改变的props,以及状态提升等等经常使用便不多总结,需要的看官方文档。JSXJ
- Python时间处理Python在处理与时间相关的操作时有两个重要模块:time和datetime。在本文中,我们介绍这两个模块并为每个场景
- 1. 从字典创建DataFrame>>> import pandas>>> dict_a = {'
- 这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。帮助蹲厕族、YP族、饭圈女孩在
- 蜗牛很慢。蜗牛快递会怎样?答案是:当然也会很慢。但是蜗牛尽了他的全力,为了它的兔子朋友,以生命在奔跑。每天都是24个小时,快的只是速度,却不
- js 中判断某个元素是否存在于某个 js 数组中,相当于 php 语言中的 in_array 函数。Array.prototype.S=St
- 前言python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符
- 这里其实并不需要其它的什么函数来支持,只需要使用MYSQL提供的一些SQL语句就可以了。这里为了简单起见,以MYSQL的系统表USER为例,
- 前言作为Web开发人员,在 Web浏览器中存储数据以改善用户体验和提升Web应用程序性能是非常常见的。在大多数情况下,可供我们使用就是Loc
- 1 写在前面前期一篇文章Python TensorFlow深度学习回归代码:DNNRegressor详细介绍了基于TensorFlow&nb
- 我就废话不多说了,大家还是直接看代码吧!# coding=utf-8import loggingimport yamlimport osim
- 通过引用serial模块包,来操作串口。1、查看串口名称在Linux和Windows中,串口的名字规则不太一样。需要事先查看。Linux下的