python scheduler cron_Python轻量级定时任务调度框架“APScheduler”
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”相关推荐
- python中的轻量级定时任务调度库:schedule
提到定时任务调度的时候,相信很多人会想到celery,要么就写个脚本塞到crontab中.不过,一个小的定时脚本,要用celery的话太"重"了.所以,我找到了一个轻量级的定时任务 ...
- Quartz定时任务调度框架
一.引言 1.1 简介 Quartz :Quartz Enterprise Job Scheduler 是一个定时任务调度框架.比如你遇到这样的问题: 想在30分钟后,查看订单是否支付,未支付则取消订 ...
- LTS 轻量级分布式任务调度框架(Light Task Scheduler)
框架概况: LTS是一个轻量级分布式任务调度框架.有三种角色, JobClient, JobTracker, TaskTracker.各个节点都是无状态的,可以部署多个,来实现负载均衡,实现更大的负载 ...
- 任务调度框架Quartz(一) Quartz——一个强大的定时任务调度框架
Quartz,水晶.石英,一个简单朴素有美丽的名字,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框架. 何为定时任务调 ...
- 分布式定时任务调度框架Quartz
文章目录 一.Quartz引言 二.Quartz使用 2.1 导入依赖 2.2 定义Job 2.3 API测试 2.3.1 细节 2.4 配置 2.5 核心类说明 三.Trigger触发器 3.1 S ...
- Spring整合定时任务调度框架Quartz实
Spring整合定时任务调度框架Quartz实战 定时的任务处理在程序开发中应用的相当普遍,之前一直使用JDK的Timer类库来做任务调度功能不是很方便,因为它不能像cron服务那样可以指定具体年.月 ...
- 定时任务调度框架实现总结
转自:http://www.blogchong.com/post/96.html 在应用里经常都有用到在后台跑定时任务的需求. 举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据 ...
- TBSchedule淘宝开源定时任务调度框架(附客户端源码demo)
淘宝开源定时任务调度框架 下载TBSchedule源码svn地址:code.taobao.org/p/tbschedule/src/trunk/ 内容包括两部分:TBSchedule源码及开发依赖包t ...
- LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷
LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷
最新文章
- python 权限控制 linux_16linux的acl的控制权限的介绍
- js调用c语言程序设计,HTML页面,测试JS对C函数的调用简单实例
- 项目经理主要工作职责
- 最全CSS各种布局详解
- python能开发游戏吗_python可以开发游戏吗,python能开发游戏吗
- 单纯形表的matlab输出,自编MATLAB版单纯性算法 可以列出单纯形表以及其他相关数据...
- github 分支 合并
- python 将0矩阵转换为none列表_在学习线性代数时所探索的Python运用
- linux aix 环境,Aix5.3安装Bash环境
- 苹果手机设置导入喜欢的音乐作为铃声
- stars-one的原创工具——星之小说下载器(JavaFx应用 )
- pandas DataFrame 直接生成plot图片 pandas.DataFrame.plot()
- 万物互联和鸿蒙系统,“万物互联”的时代来了,华为公布鸿蒙系统百款设备升级时间表...
- 关于EMC DAE、DPE、SPE、SPS的解释
- Interactive natural language question answering over knowledge graphs论文导读
- android 公钥pem编码,如何将PEM编码的Elliptic Curve公钥加载到Bouncy Castle中?
- bat 批处理拷贝文件
- 布赖恩·克尼根位计数算法说明及简单使用
- 8、springboot-获取客户端Ip地址
- HTC Android手机刷机详细全教程