APScheduler是Python的一个定时任务框架,用于执行周期或者定时任务,可以基于日期、时间间隔,及类似于云服务器Linux系统上的定时任务crontab类型的定时任务;该框架不仅可以添加、删除定时任务,还可以将任务存储到数据库中,实现任务的持久化,使用起来非常方便。

安装方式:pip install apscheduler

pscheduler组件及简单说明:

1、triggers(触发器):触发器包含调度逻辑,每一个作业有它自己的触发器2、job stores(作业存储):用来存储被调度的作业,默认的作业存储器是简单地把作业任务保存在内存中,支持存储到MongoDB,Redis数据库中3、executors(执行器):执行器用来执行定时任务,只是将需要执行的任务放在新的线程或者线程池中运行4、schedulers(调度器):调度器是将其它部分联系在一起,对使用者提供接口,进行任务添加,设置,删除。

实例1 -间隔性任务

from datetime import datetime
import os
from apscheduler.schedulers.blocking import BlockingSchedulerdef tick():print('Tick! The time is: %s' % datetime.now())if __name__ == '__main__':scheduler = BlockingScheduler()scheduler.add_job(tick, 'interval', seconds=3)print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C    '))try:scheduler.start()except (KeyboardInterrupt, SystemExit):pass

导入调度器模块 BlockingScheduler,这是最简单的调度器,调用 start 方阻塞当前进程,如果你的程序只用于调度,除了调度进程外没有其他后台进程,那么请用 BlockingScheduler 非常有用,此时调度进程相当于守护进程。

定义一个函数 tick 代表我们要调度的作业程序。

实例化一个 BlockingScheduler 类,不带参数表明使用默认的作业存储器-内存,默认的执行器是线程池执行器,最大并发线程数默认为 10 个(另一个是进程池执行器)。
第 11 行添加一个作业 tick,触发器为 interval,每隔 3 秒执行一次,另外的触发器为 date,cron。date 按特定时间点触发,cron 则按固定的时间间隔触发。
加入捕捉用户中断执行和解释器退出异常,pass 关键字,表示什么也不做。

测试结果如下:

实例2 -cron任务

from datetime import datetime
import os
from apscheduler.schedulers.blocking import BlockingSchedulerdef tick():print('Tick! The time is: %s' % datetime.now())if __name__ == '__main__':scheduler = BlockingScheduler()scheduler.add_job(tick, 'cron', hour=19,minute=23)print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C    '))try:scheduler.start()except (KeyboardInterrupt, SystemExit):passhour =19 , minute =23
hour ='19', minute ='23'
minute = '*/3' 表示每 5 分钟执行一次
hour ='19-21', minute= '23' 表示 19:23、 20:23、 21:23 各执行一次任务

配置调度器

调度器的主要循环其实就是反复检查是不是到时需要执行的任务。

询问自己的每一个作业存储器,有没有到期需要执行的任务,如果有,计算这些作业中每个作业需要运行的时间点,如果时间点有多个,做 coalesce 检查。提交给执行器按时间点运行。

在配置调度器前,我们首先要选取适合我们应用环境场景的调度器,存储器和执行器。下面是各调度器的适用场景:

BlockingScheduler:适用于调度程序是进程中唯一运行的进程,调用start函数会阻塞当前线程,不能立即返回。
BackgroundScheduler:适用于调度程序在应用程序的后台运行,调用start后主线程不会阻塞。
AsyncIOScheduler:适用于使用了asyncio模块的应用程序。
GeventScheduler:适用于使用gevent模块的应用程序。
TwistedScheduler:适用于构建Twisted的应用程序。
QtScheduler:适用于构建Qt的应用程序。
上述调度器可以满足我们绝大多数的应用环境,本文以两种调度器为例说明如何进行调度器配置。

接口云服务磁盘性能自动化测试定时任务讲解

from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_jobscheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
scheduler.start()

磁盘测试执行内容

def RunDisk(taskuuid, taskTF=False):res = PDCreate(taskuuid)
ret = res["ret"]
if ret == 2:reportuuid = res["data"]["reportuuid"]task_mes = models.Performance_Disk.objects.all()task_mes.filter(taskuuid=taskuuid).update(reportuuid=reportuuid)
if taskTF == True:disk_mes = models.Performance_Disk.objects.filter(taskuuid=taskuuid)disk_mes.update(TestStatus="执行中")
return res

添加定时任务

def diskTask(taskuuid, day, hour):
T1 = GetNewTime()
#                    月       天      时        分          秒
new_time = T1.new_times(month=0, day=day, hours=0, minutes=0, seconds=0)
end_date = str(new_time)
disk_mes = models.Performance_Disk.objects.filter(taskuuid=taskuuid)
disk_mes.update(duration=day, timing=hour, etime=end_date)
scheduler.add_job(func=RunDisk, args=[taskuuid, True], trigger='cron',day_of_week='0-6', id=taskuuid, misfire_grace_time=30, max_instances=10,hour=hour, end_date=end_date)

睿江云官网链接:www.eflycloud.com

python scheduler cron_Python轻量级定时任务调度框架“APScheduler”相关推荐

  1. python中的轻量级定时任务调度库:schedule

    提到定时任务调度的时候,相信很多人会想到celery,要么就写个脚本塞到crontab中.不过,一个小的定时脚本,要用celery的话太"重"了.所以,我找到了一个轻量级的定时任务 ...

  2. Quartz定时任务调度框架

    一.引言 1.1 简介 Quartz :Quartz Enterprise Job Scheduler 是一个定时任务调度框架.比如你遇到这样的问题: 想在30分钟后,查看订单是否支付,未支付则取消订 ...

  3. LTS 轻量级分布式任务调度框架(Light Task Scheduler)

    框架概况: LTS是一个轻量级分布式任务调度框架.有三种角色, JobClient, JobTracker, TaskTracker.各个节点都是无状态的,可以部署多个,来实现负载均衡,实现更大的负载 ...

  4. 任务调度框架Quartz(一) Quartz——一个强大的定时任务调度框架

    Quartz,水晶.石英,一个简单朴素有美丽的名字,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框架. 何为定时任务调 ...

  5. 分布式定时任务调度框架Quartz

    文章目录 一.Quartz引言 二.Quartz使用 2.1 导入依赖 2.2 定义Job 2.3 API测试 2.3.1 细节 2.4 配置 2.5 核心类说明 三.Trigger触发器 3.1 S ...

  6. Spring整合定时任务调度框架Quartz实

    Spring整合定时任务调度框架Quartz实战 定时的任务处理在程序开发中应用的相当普遍,之前一直使用JDK的Timer类库来做任务调度功能不是很方便,因为它不能像cron服务那样可以指定具体年.月 ...

  7. 定时任务调度框架实现总结

    转自:http://www.blogchong.com/post/96.html 在应用里经常都有用到在后台跑定时任务的需求. 举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据 ...

  8. TBSchedule淘宝开源定时任务调度框架(附客户端源码demo)

    淘宝开源定时任务调度框架 下载TBSchedule源码svn地址:code.taobao.org/p/tbschedule/src/trunk/ 内容包括两部分:TBSchedule源码及开发依赖包t ...

  9. LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷

    LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷

最新文章

  1. python 权限控制 linux_16linux的acl的控制权限的介绍
  2. js调用c语言程序设计,HTML页面,测试JS对C函数的调用简单实例
  3. 项目经理主要工作职责
  4. 最全CSS各种布局详解
  5. python能开发游戏吗_python可以开发游戏吗,python能开发游戏吗
  6. 单纯形表的matlab输出,自编MATLAB版单纯性算法 可以列出单纯形表以及其他相关数据...
  7. github 分支 合并
  8. python 将0矩阵转换为none列表_在学习线性代数时所探索的Python运用
  9. linux aix 环境,Aix5.3安装Bash环境
  10. 苹果手机设置导入喜欢的音乐作为铃声
  11. stars-one的原创工具——星之小说下载器(JavaFx应用 )
  12. pandas DataFrame 直接生成plot图片 pandas.DataFrame.plot()
  13. 万物互联和鸿蒙系统,“万物互联”的时代来了,华为公布鸿蒙系统百款设备升级时间表...
  14. 关于EMC DAE、DPE、SPE、SPS的解释
  15. Interactive natural language question answering over knowledge graphs论文导读
  16. android 公钥pem编码,如何将PEM编码的Elliptic Curve公钥加载到Bouncy Castle中?
  17. bat 批处理拷贝文件
  18. 布赖恩·克尼根位计数算法说明及简单使用
  19. 8、springboot-获取客户端Ip地址
  20. HTC Android手机刷机详细全教程

热门文章

  1. gentoo/funtoo 环境配置使用 valgrind
  2. ex28 布尔表达式练习
  3. CSS_照片墙例子 相对定位
  4. 数据结构之红黑树(三)——删除操作
  5. toolbox、library 的组织
  6. 在.NET环境中实现每日构建(Daily Build)--ccnet,MSBuild篇
  7. 4-算法冒泡排序 插入排序
  8. Python框架篇之Django(Models的多表操作)
  9. 【2】二级C语言中那些易错的概念题
  10. 计算机语言php自学,php自学需要多久?