转载自 8种用Python实现定时执行任务的方案,一定有你用得到的_小熊猫爱恰饭的博客-CSDN博客_python定时执行函数

我们在日常工作中,常常会用到需要周期性执行的任务。
一种方式是采用 Linux 系统自带的 crond 结合命令行实现;
一种方式是直接使用Python;

于是我把常见的Python定时任务实现方法整理了一下,希望对大家有所帮助。


利用while True: + sleep()实现定时任务
使用Timeloop库运行定时任务
利用threading.Timer实现定时任务
利用内置模块sched实现定时任务
利用调度模块schedule实现定时任务
利用任务框架APScheduler实现定时任务
Job 作业
Trigger 触发器
Executor 执行器
Jobstore 作业存储
Event 事件
调度器
APScheduler中的重要概念
Scheduler的工作流程

使用分布式消息系统Celery实现定时任务
使用数据流工具Apache Airflow实现定时任务
Airflow 产生的背景
Airflow 核心概念
Airflow 的架构
 

很多小伙伴在学习Python的过程中因为没人解答指导,或者没有好的学习资料导致自己学习坚持不下去,从入门到放弃,所以小编特地创了一个群,给大家准备了一份学习资料送给大家,有啥问题都可以在群里问,互相交流~
点我免费进群领取
包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划
都可以在群里免费领取
Python 相关问题可解答
Python 相关外包需求可发布
Python 相关招聘需求可发布

一、利用while True: + sleep()实现定时任务
位于 time 模块中的 sleep(secs) 函数,可以实现令当前执行的线程暂停 secs 秒后再继续执行。所谓暂停,即令当前线程进入阻塞状态,当达到 sleep() 函数规定的时间后,再由阻塞状态转为就绪状态,等待 CPU 调度。

基于这样的特性我们可以通过while死循环+sleep()的方式实现简单的定时任务。
代码示例:

 

 

 

主要缺点:

只能设定间隔,不能指定具体的时间,比如每天早上8:00
sleep 是一个阻塞函数,也就是说 sleep 这一段时间,程序什么也不能操作。
二、 使用Timeloop库运行定时任务
Timeloop是一个库,可用于运行多周期任务。这是一个简单的库,它使用decorator模式在线程中运行标记函数。

示例代码:


三、利用threading.Timer实现定时任务
threading 模块中的 Timer 是一个非阻塞函数,比 sleep 稍好一点,timer最基本理解就是定时器,我们可以启动多个定时任务,这些定时器任务是异步执行,所以不存在等待顺序执行问题。

 

 

Timer(interval, function, args=[ ], kwargs={ })

interval: 指定的时间
function: 要执行的方法
args/kwargs: 方法的参数
代码示例:

 

备注:Timer只能执行一次,这里需要循环调用,否则只能执行一次

四、利用内置模块sched实现定时任务
sched模块实现了一个通用事件调度器,在调度器类使用一个延迟函数等待特定的时间,执行任务。同时支持多线程应用程序,在每个任务执行后会立刻调用延时函数,以确保其他线程也能执行。

class sched.scheduler(timefunc, delayfunc)这个类定义了调度事件的通用接口,它需要外部传入两个参数,timefunc是一个没有参数的返回时间类型数字的函数(常用使用的如time模块里面的time),delayfunc应该是一个需要一个参数来调用、与timefunc的输出兼容、并且作用为延迟多个时间单位的函数(常用的如time模块的sleep)。

代码示例:

 

scheduler对象主要方法:

enter(delay, priority, action, argument),安排一个事件来延迟delay个时间单位。
-cancel(event):从队列中删除事件。如果事件不是当前队列中的事件,则该方法将跑出一个ValueError。
-run():运行所有预定的事件。这个函数将等待(使用传递给构造函数的delayfunc()函数),然后执行事件,直到不再有预定的事件。
个人点评:比threading.Timer更好,不需要循环调用。

五、利用调度模块schedule实现定时任务
schedule是一个第三方轻量级的任务调度模块,可以按照秒,分,小时,日期或者自定义事件执行时间。schedule允许用户使用简单、人性化的语法以预定的时间间隔定期运行Python函数(或其它可调用函数)。

先来看代码,是不是不看文档就能明白什么意思?

 

装饰器:通过 @repeat() 装饰静态方法

传递参数:

 

装饰器同样能传递参数:

 

取消任务:

 

运行一次任务:

 

根据标签检索任务:

 

根据标签取消任务:

 

运行任务到某时间:

 

马上运行所有任务(主要用于测试):

 

并行运行:使用 Python 内置队列实现:

 


六、利用任务框架APScheduler实现定时任务
APScheduler(advanceded python scheduler)基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。基于这些功能,我们可以很方便的实现一个Python定时任务系统。

 

 

示例代码:


 

 

 

 

 

 

 

 

 

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐