如何调度spark程序_如何定时,周期性的运行程序?Python APScheduler实现任务灵活调度...

82d4d9155ed09e2c42cdbe108712b907.png

在我们的开发工作中,时常会有这样的开发需求,如需要定时或者周期性的运行某些程序,因此经常用到一些定时服务,如在 Linux系统中使用 Crond 服务实现程序的定时运行。

Python中也有这样的一个模块,那就是 APScheduler,它是基于Quartz 的一个 Python定时任务框架,实现了 Quartz的全部功能,使用起来十分简单、高效。其提供了基于日期、固定时间间隔以及 Crontab类型的任务,并且支持持久化任务。同时也提供了不同的存储机制,可以方便与数据库等第三方的外部持久化存储进行协同工作。它主要包含了四种组件:

  • Triggers:任务触发器,任务以何种方式触发。
  • Job stores:任务存储器,持久存储任务。
  • Executors:任务执行器,执行任务的模块。
  • Schedulers:任务调度器,通过配置 trigger、job store、executor等实现对任务的增删改查等调度控制。

APScheduler安装

8dcc9ceac199555cfa0dad90b897963e.png

安装过程如下:

c3fe076c9e4f3bc6b8752d3114a5ef02.png

任务存储器 Job stores

Job stores 存储被调度的任务,默认的任务存储是简单地把任务保存在内存(MemoryJobStore)中,其他的任务存储形式是将任务保存在数据库中。一个任务的数据将在保存在持久化任务存储时被序列化,在加载时被反序列化。调度器不能分享同一个任务存储。job store支持主流的存储机制:redis、mongodb、内存等等。

MongoDBJobStore为例,实例如下:

b94d409133dc6a448d10b0a91a8a5855.png

执行器 Executors

Executors 处理任务的运行,他们通常通过在任务中提交制定的可调用对象到一个线程或者进城池来进行,当任务完成时,执行器将会通知调度器。


调度器 Schedulers

通常在应用只有一个调度器,调度器提供了处理任务存储、调度器、触发器合适的接口。配置任务存储和执行器可以在调度器中完成,例如添加、修改和移除任务。常用的调度器如下:

  • BlockingScheduler:仅可用在当前你的进程之内,与当前的进行共享计算资源,适合于只在进程中运行单个任务的情况,通常在调度器是你唯一要运行的东西时使用。
  • BackgroundScheduler: 在后台运行调度,不影响当前的系统计算运行,适合于要求任何在程序后台运行的情况,当希望调度器在应用后台执行时使用。
  • AsyncIOScheduler: 如果当前系统中使用了async module,则需要使用异步的调度器,适合于使用asyncio框架的情况。
  • GeventScheduler: 如果使用了 gevent,则需要使用该调度,适合于使用 gevent框架的情况。
  • TornadoScheduler: 如果使用了Tornado, 则使用当前的调度器,适合于使用 Tornado框架的应用。
  • TwistedSchedulerTwister应用的调度器,适合使用Twisted框架的应用。
  • QtScheduler: Qt的调度器,适合使用QT的情况。

触发器种类Triggers

Triggers 包含调度逻辑,每一个任务有它自己的触发器,用于决定接下来哪一个任务运行,根据 Triggers 中定义的时间点,执行频率,时间区间等等参数设置。除了他们自己初始配置以外,触发器完全是无状态的,触发器有如下几种:

  • date:一次性任务,即只执行一次任务。
  • interval:循环任务,即按照时间间隔执行任务。
  • cron:定时任务,即在每个时间段执行任务。

interval 触发器实例

指定触发器为 interval,循环任务,即按照 时间间隔 执行任务。

参数如下

  • year (int|str) :表示四位数的年份,如2019年
  • month (int|str) :表示取值范围为1-12月。
  • day (int|str) :表示取值范围为1-31日。
  • week (int|str) :一年中的第几周 (1-53)。
  • day_of_week (int|str) :表示一周中的第几天(0-6)。
  • hour (int|str):表示取值范围为0-23时。
  • minute (int|str) :表示取值范围为0-59分。
  • second (int|str) :表示取值范围为0-59秒。
  • start_date (datetime|str) :表示开始时间。
  • end_date (datetime|str) :表示结束时间。
  • timezone (datetime.tzinfo|str) :表示时区取值。
c6a397342a40c8525b6e39c373b78fb2.png

如上,我们设定 每2秒执行一次,运行结果如下:

bc2cb9491dec61af73e81066134798a3.png

date 触发器实例

指定触发器为 date一次性任务,即只执行一次任务。

f030474954830b4e0cc59931c7f9cf21.png

如上,我们设定任务 延时五秒 后执行,运行结果如下:

841b1355cf13254873c7c2622911c24b.png

cron 触发器实例

指定触发器为 cron,定时任务,即在每个时间段执行任务

参数如下

  • year (int|str) :表示四位数的年份,如2019年
  • month (int|str) :表示取值范围为1-12月。
  • day (int|str) :表示取值范围为1-31日。
  • week (int|str) :一年中的第几周 (1-53)。
  • day_of_week (int|str) :表示一周中的第几天(0-6)。
  • hour (int|str):表示取值范围为0-23时。
  • minute (int|str) :表示取值范围为0-59分。
  • second (int|str) :表示取值范围为0-59秒。
  • start_date (datetime|str) :表示开始时间。
  • end_date (datetime|str) :表示结束时间。
  • timezone (datetime.tzinfo|str) :表示时区取值。
7b727d06b706e8b3b7360e46799bd0e0.png

如上,我们设定在2、4月、7~9月,每天晚上22点21分执行一次任务,运行结果如下:

20722208ed228f1b23ee9cd446e49151.png

移除、暂停/恢复任务

468597d4ce62c19ee0a45e66a4760035.png

63e895ba5d36e02d908f9336135474fc.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis实现轮询算法_【07期】Redis中是如何实现分布式锁的?

点击上方“Java面试题精选”,关注公众号面试刷图,查缺补漏分布式锁常见的三种实现方式:数据库乐观锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁。本地面试考点是,你对Redis使用熟悉吗?Redis…

前端radio单选框默认选中_开发记录篇前端内容1

有段时间没有更新文章了,因为是用的公司电脑,没有虚拟机,所以就没法演示hadoop相关的东西了,而且大数据篇的东西需要花费一些时间和精力去收集整理内容,那大数据篇就先暂停一下。最近这段时间的话我可能会更新一些开发…

专属海报小程序_剑3泡泡 | 小程序给你一份专属的账号海报!

01按照惯例,这里是简介paopaods.com本期推送的是:如何正确的使用小程序每个账号均可小程序【剑3泡泡】搜到,生成专属账号海报!点击底部【点我卖号】即可拥有!02教程开始之前,安利paopaods.com泡泡家定金调整…

td不允许自己扩展_V神原文详解:通过及时性检测器(TD)解决区块链的51%攻击问题...

注:原文作者是以太坊联合创始人Vitalik Buterin,在这篇文章中,他提出了一种称为及时性检测器(TD)的构造,以试图解决区块链51%攻击的问题。(图:Vitalik Buterin)以下为译文:摘要我提出了一种基于Lamport 99%…

Hadoop安装之JDK在Centos虚拟机中安装

安装jdk.bin和jdk.tar.gz打的办法 安装jdk.bin 安装好的VM Centos7的虚拟机, 1、查看是否是64位操作系统: cat /proc/cpuinfo | grep flags | grep lm | wc -l 如果结果>0 则是64位操作系统 2、JDK 中 jdk-6u41-linux-x64.bin 和 jdk-6u41-linux-x64…

Exp3 免杀原理与实践

---恢复内容开始--- 一,实验内容 利用多种工具实现实现恶意代码免杀在另一台电脑上,杀软开启的情况下,实现运行后门程序并回连成功二,实验步骤 (1)使用msf编码器生成的后门程序 这里可以直接用上次实验生成…

如何进入指定文件目录_Python如何遍历操作指定文件目录下的全部Excel文件?

Python Tablib是麻省理工学院授权的与格式无关的表格数据集库。支持导入、导出和操作表格数据集,轻松的将数据导出为各种不同的格式,包括excel,json,html,yaml,csv,tsv等格式。接下来&#xff0…

《雪吁》

凛冽隆冬风骨寒,层云避日雾无边; 渐絮残花萧萧夜,窗前瘦花犹遮帘。 转载于:https://www.cnblogs.com/morron/p/8749430.html

条形图坐标轴_解密咨询报告中常见的双层条形图的制作方法

为了增加PPT的设计灵感,我除了经常逛一些设计社区之外,也会收集的各个公司咨询报告来学习。昨天我看了4份数据报告,发现这4份数据报告中都出现了一个共同的图表类型。第1个图表自于IXDC发布的《2018年中国用户体验行业调查报告》,…

赋值给集合_ArrayList集合源码

ArrayList简介ArrayList 是 Java 集合框架中比较常用的数据结构了。ArrayList是可以动态增长和缩减的索引序列,内部封装了一个动态再分配的Object[]数组这里我们可以看到ArrayList继承抽象类AbstractList,实现了 List 接口,同时还实现了 Rand…

剪切文件_lammps模拟带缺陷镍板剪切变形(in文件及注释)

本期给大家带来lammps模拟带缺陷镍板剪切变形的in文件及其详细注释。初始模型如图一所示:图1 生成的初始模型 in文件及注释如下:#利用eam势函数模拟带缺陷镍板的剪切#模型构成——上下镍板夹可动镍块,镍块中有圆柱形缺陷,移动上镍…

为什么将表格的method改为post后就无法工作_用Python将Keras深度学习模型部署为Web应用程序...

构建一个很棒的机器学习项目是一回事,但归根结底,你希望其他人能够看到你的辛勤工作。当然,你可以将整个项目放在GitHub上,但是怎么让你的祖父母也看到呢?我们想要的是将深度学习模型部署为世界上任何人都可以访问的We…

centos 源码安装mysql5.6_CentOS 7下源码安装MySQL 5.6

目录准备工作运行环境确认你的安装版本下载MySQL安装MySQL准备安装环境编译和安装配置MySQL单实例配置单实例配置方法添加防火墙启动MySQL重启MySQL多实例配置什么是多实例多实例配置方法创建启动文件初始化数据库配置防火墙启动MySQL登陆MySQL重启MySQL准备工作运行环境本文的…

跳一跳

转载于:https://www.cnblogs.com/shanhua-fu/p/8807348.html

树莓派 无法安装mysql_树莓派安装mysql

前置,更新系统sudo apt-get updatesudo apt-get upgrade安装与配置MySQL直接安装mysql的话,默认下载的是MariaDB,两者差别不大,用法一样。如果真想下载mysql,需要换源,新版的Linux系统自带的是MariaDB&…

ABP框架使用 Swagger

在最近的一个项目中用到了 ABP框架 http://aspnetboilerplate.com/ ,第一次接触到 Swagger https://swagger.io/ 以及前后端的完全分离 在ABP官网下载下来的ABP框架结构【基于ASP.NET MVC5.x的】如图: ABP的EntityFramework 是Code First Mode的,所以在配…

JVM第五部分 高效并发

java 内存模型与线程 硬件内存模型 java内存模型 主内存vs工作内存 所有变量都在主内存(虚拟机内存的一部分),每条线程都有自己的工作内存,线程所有用到的变量都必须从主内存拷贝出来(不能直接读写主内存变量&#xff…

hadoop元数据mysql中表字段_hive mysql元数据表说明

2019独角兽企业重金招聘Python工程师标准>>>数据库相关的表DBS该表存储Hive中所有数据库的基本信息,字段如下:元数据表字段说明示例数据DB_ID数据库ID2DESC数据库描述测试库DB_LOCATION_URI数据库HDFS路径hdfs://namenode/user/hive/warehouse/…

CentOs7.2编译安装Nginx服务器

1. 安装nginx依赖 首先安装nginx的依赖 yum install gcc gcc-c openssl openssl-devel cyrus-sasl-md5 2,创建nginx用户 如果没有nginx,启动nginx时会报错 [rootlocalhost nginx-1.11.2]# /usr/local/nginx/sbin/nginx nginx: [emerg] getpwnam("ng…

2017-2018-2 20179215《网络攻防实践》第六周作业

2017-2018-2 20179215《网络攻防实践》 第六周学习总结 课本学习笔记 一、TCP/IP网络协议攻击 1.网络安全的属性:机密性 、完整性 、可用性 、真实性 、不可抵赖性 。 2.网络攻击的基本模式分为:截获(嗅探 与 监听) 、中断&#x…