热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详解Python定时任务APScheduler

小编这次要给大家分享的是详解Python定时任务APScheduler,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获

小编这次要给大家分享的是详解Python定时任务APScheduler,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。

定时任务:

1、 线程睡眠函数 sleep() ——粗暴!一直占有 CPU 资源,导致后续操作无法执行

2、 threading.Timer(10, task, ()).start() # (间隔s,任务task, 函参)

3、 import sched

# 初始化 sched 模块的 scheduler 类
scheduler = sched.scheduler(time.time, time.sleep)
# 增加调度任务 enter(delay, priority, action, argument=(), kwargs={})
scheduler.enter(10, 1, task) 
# 运行任务
scheduler.run()

scheduler 中的每个调度任务只会工作一次,不会无限循环被调用。如果想重复执行同一任务, 需要重复添加调度任务即可。

  • enter(delay, priority, action, argument=(), kwargs={}) 间隔执行任务。delay单位是秒。priority越小优先级越大。两个任务指定相同的延迟时间,优先级大的任务会向被执行。action 即需要执行的函数,argument 和 kwargs 分别是函数的位置和关键字参数。
  • scheduler.enterabs(time, priority, action, argument=(), kwargs={}) 时间点执行任务。因此,time是绝对时间.其他参数用法与 enter() 中的参数用法是一致。
     

APScheduler——Advanced Python Scheduler。

一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux下Crontab 命令。同时,它还支持异步执行、后台执行调度任务。

import datetime
import time
from apscheduler.schedulers.background import BackgroundScheduler

def timedTask():
  print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])

if __name__ == '__main__':
  # 1.创建后台执行的 schedulers
  scheduler = BackgroundScheduler() 
  # 2.添加调度任务,调度方法为 timedTask,触发器选择 interval(间隔性),间隔时长为 2 秒
  job = scheduler.add_job(timedTask, 'interval', secOnds=2)
  # 3.启动调度任务
  scheduler.start()
  
  while True:
    print(time.time())
    time.sleep(5)

基础组件

  • schedulers(调度器)它是任务调度器,属于控制器角色。它配置作业存储器和执行器可以在调度器中完成,例如添加、修改和移除作业。
    • BlockingScheduler : 调度器在当前进程的主线程中运行,也就是会阻塞当前线程。
    • BackgroundScheduler : 调度器在后台线程中运行,不会阻塞当前线程。
    • AsyncIOScheduler : 结合 asyncio 模块(一个异步框架)一起使用。
    • GeventScheduler : 程序中使用 gevent(高性能的Python并发框架)作为IO模型,和 GeventExecutor 配合使用。
    • TornadoScheduler : 程序中使用 Tornado(一个web框架)的IO模型,用 ioloop.add_timeout 完成定时唤醒。
    • TwistedScheduler : 配合 TwistedExecutor,用 reactor.callLater 完成定时唤醒。
    • QtScheduler : 你的应用是一个 Qt 应用,需使用QTimer完成定时唤醒。
  • triggers(触发器)描述调度任务被触发的条件。不过触发器完全是无状态的。
    • date 时间点触发: scheduler .add_job(job_func, 'date', run_date=datetime(2017, 12, 13, 14, 0, 0), args=['text'])
    • interval 固定时间间隔触发: scheduler .add_job(job_func, 'interval', minutes=2, start_date='2017-12-13 14:00:01' , end_date='2017-12-13 14:00:10')
    • cron 特定时间周期性地触发: scheduler .add_job(job_func, 'cron', mOnth='1-3,7-9',day='0, tue', hour='0-3')
  • job stores(作业存储器)任务持久化仓库,默认保存任务在内存中,也可将任务保存都各种数据库中,任务中的数据序列化后保存到持久化数据库,从数据库加载后又反序列化。
    • 有两种添加方法,一是 add_job(), 二是scheduled_job()修饰器来修饰函数。区别是:第一种方法返回一个 apscheduler.job.Job 的实例,可用来改变或移除 job。第二种方法只适用于应用运行期间不会改变的 job。
    • 移除 job 也有两种方法:remove_job() 和 job.remove()。
    • remove_job() 是根据 job 的 id 来移除,所以要在 job 创建时指定一个 id。job.remove() 则是对 job 执行 remove 方法即可。
    • 获取 job 列表:通过 scheduler.get_jobs() 方法能够获取当前调度器中的所有 job 的列表。
    • 修改job: 用Job.modify() 或 modify_job()方法来修改 job 的属性。但注意job 的 id 是无法被修改的。
    • 关闭 job:默认情况下调度器会等待所有正在运行的作业完成后,关闭所有的调度器和作业存储。如果你不想等待,可以将 wait 选项设置为 False。
    • 更新任务reschedule_job()
  • executors(执行器)负责处理作业的运行,它们通常通过在作业中提交指定的可调用对象到一个线程或进城池来进行。当作业完成时,执行器将会通知调度器。最常用的 executor 有两种:ProcessPoolExecutor 和 ThreadPoolExecutor

看完这篇关于详解Python定时任务APScheduler的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。


推荐阅读
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 本文将介绍由密歇根大学Charles Severance教授主讲的顶级Python入门系列课程,该课程广受好评,被誉为Python学习的最佳选择。通过生动有趣的教学方式,帮助初学者轻松掌握编程基础。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
author-avatar
毛毛-刘庆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有