scheduler定时任务的基础使用
创建一个定时任务
class MyTimer(threading.Thread): # 我的定时任务def __init__(self):threading.Thread.__init__(self)def run(self):print("定时任务已启动")scheduler = BlockingScheduler()scheduler.add_job(A,'interval', days=1)scheduler.add_job(B, day=1, args=[10])scheduler.start()
APScheduler 有三种内建的 trigger:
1)date 触发器
date 是最基本的一种调度,作业任务只会执行一次。它表示特定的时间点触发。它的参数如下:
参数 | 说明 |
---|---|
run_date (datetime 或 str) | 作业的运行日期或时间 |
timezone (datetime.tzinfo 或 str) | 指定时区 |
date 触发器使用示例如下:
from datetime import datetime
from datetime import date
from apscheduler.schedulers.background import BackgroundSchedulerdef job_func(text):print(text)scheduler = BackgroundScheduler()
# 在 2017-12-13 时刻运行一次 job_func 方法
scheduler .add_job(job_func, 'date', run_date=date(2017, 12, 13), args=['text'])
# 在 2017-12-13 14:00:00 时刻运行一次 job_func 方法
scheduler .add_job(job_func, 'date', run_date=datetime(2017, 12, 13, 14, 0, 0), args=['text'])
# 在 2017-12-13 14:00:01 时刻运行一次 job_func 方法
scheduler .add_job(job_func, 'date', run_date='2017-12-13 14:00:01', args=['text'])scheduler.start()
2)interval 触发器
固定时间间隔触发。interval 间隔调度,参数如下:
参数 | 说明 |
---|---|
weeks (int) | 间隔几周 |
days (int) | 间隔几天 |
hours (int) | 间隔几小时 |
minutes (int) | 间隔几分钟 |
seconds (int) | 间隔多少秒 |
start_date (datetime 或 str) | 开始日期 |
end_date (datetime 或 str) | 结束日期 |
timezone (datetime.tzinfo 或str) | 时区 |
interval 触发器使用示例如下:
import datetime
from apscheduler.schedulers.background import BackgroundSchedulerdef job_func(text):print(datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])scheduler = BackgroundScheduler()
# 每隔两分钟执行一次 job_func 方法
scheduler .add_job(job_func, 'interval', minutes=2)
# 在 2017-12-13 14:00:01 ~ 2017-12-13 14:00:10 之间, 每隔两分钟执行一次 job_func 方法
scheduler .add_job(job_func, 'interval', minutes=2, start_date='2017-12-13 14:00:01' , end_date='2017-12-13 14:00:10')scheduler.start()
3)cron 触发器
在特定时间周期性地触发,和Linux crontab格式兼容。它是功能最强大的触发器。
我们先了解 cron 参数:
参数 | 说明 |
---|---|
year (int 或 str) | 年,4位数字 |
month (int 或 str) | 月 (范围1-12) |
day (int 或 str) | 日 (范围1-31 |
week (int 或 str) | 周 (范围1-53) |
day_of_week (int 或 str) | 周内第几天或者星期几 (范围0-6 或者 mon,tue,wed,thu,fri,sat,sun) |
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) | 指定时区 |
这些参数是支持算数表达式,取值格式有如下:
cron 触发器使用示例如下:
import datetime
from apscheduler.schedulers.background import BackgroundSchedulerdef job_func(text):print("当前时间:", datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3])scheduler = BackgroundScheduler()
# 在每年 1-3、7-9 月份中的每个星期一、二中的 00:00, 01:00, 02:00 和 03:00 执行 job_func 任务
scheduler .add_job(job_func, 'cron', month='1-3,7-9',day='0, tue', hour='0-3')scheduler.start()
通过装饰器scheduled_job()添加方法
import time
from apscheduler.schedulers.blocking import BlockingSchedulerscheduler = BlockingScheduler()@scheduler.scheduled_job('interval', seconds=5)
def job1(): t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))print('job1 --- {}'.format(t))@scheduler.scheduled_job('cron', second='*/7')
def job2(): t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))print('job2 --- {}'.format(t))scheduler.start()'''
运行结果:
job2 --- 2019-08-29 22:36:35
job1 --- 2019-08-29 22:36:37
job2 --- 2019-08-29 22:36:42
job1 --- 2019-08-29 22:36:42
job1 --- 2019-08-29 22:36:47
job2 --- 2019-08-29 22:36:49
...余下省略...
'''
参考文章:https://blog.csdn.net/xc_zhou/article/details/80952147
scheduler定时任务的基础使用相关推荐
- 【定时任务】- 基础篇
[定时任务]- 基础编 一.什么是定时任务 二.为什么要用定时任务 三.怎么使用定时任务 四.cron表达式 五.异步多线程使用定时任务 一.什么是定时任务 定时任务,简要说明就是在指定时间内触发执行 ...
- java 获取scheduler_Spring Scheduler定时任务 + Quartz
定时任务几种实现方式 Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务,没怎么用过就不说了. Spring3.0以后自带的task,可以将 ...
- linux定时任务Crond基础概念原理介绍01
说明:本文来自老男孩linux运维实战培训-就业课程视频内容,本文内容为系列内容,更多分享信息见:http://oldboy.blog.51cto.com/2561410/1120636 1)视频实战 ...
- quartz mysql索引_分布式系统中的定时任务全解(二)
在实际项目中,通常需要用到定时任务(定时作业),spring框架提供了很好的实现. 1. 下载spring-quartz插件包 这里默认当前系统中是集成了spring框架的基本功能的.去网上下载sp ...
- 8-12 三个定时任务
为了保证redis-sentinel对redis 节点做失败判定,以及做故障转移,redis有3个定时任务作为基础实现上述过程. redis-sentinel.conf配置了sentinel moni ...
- Java如何实现定时任务?
看完这篇文章你会了解到什么是定时任务,以及为什么austin项目要引入分布式定时任务框架,可以把代码下载下来看到我是怎么使用xxl-job的. 01.如何简单实现定时功能? 我是看视频入门Java的, ...
- SpringBoot与Shedule定时任务
一.问题描述 1. springBoot中的@Schedule注解定时任务,在某些情况下并没有生效,定时任务不再执行,进而导致业务出现问题. 二.分析定位 1. 首先查看百度有没有相关的问题,查 ...
- 对英雄联盟比赛预测(三)- 数据获取Java实现
系列文章目录 对英雄联盟比赛预测(一)- 特征分析 对英雄联盟比赛预测(二)- 数据获取api分析 对英雄联盟比赛预测(三)- 数据获取Java实现 文章目录 系列文章目录 声明 前言 一.基本框架 ...
- Apscheduler结合flask进行动态任务管理
1. 简介与安装 Apscheduler是一个轻量级的 Python 定时任务调度框架.APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab ...
最新文章
- 首款微控制器级树莓派 Pico,超廉价只需4美元
- Android项目框架综合实例
- linux安装emc的多路径软件,linux (centos)安装EMCPower多路径软件
- gmod的css模块放哪里,webpack打包css报错找不到模块?
- HDU - 1528 Card Game Cheater(二分图最大匹配)
- chrome关闭自动更新 mac
- vue 如何处理两个组件异步问题_Vue异步组件使用详解
- 计网实验三 虚拟局域网 VLAN
- 北京邮电计算机课程表,北邮通信工程本科专业课程表
- 华为谷歌安装器 Android6.0,gms安装器华为
- H5 - 手机 APP 接入支付宝、微信、银联支付流程汇总
- html中font的作用,css中font-style有什么用?
- 电脑桌面的word文件丢失了怎么找回?7个解决方法!
- DS二叉树--层次遍历
- android 模拟器监听短信,android模拟器用命令和DDMS模拟来电和短信
- 【机器学习线性代数】10 相似对角矩阵:漂亮的最简形式
- 如何将视频中的音频提取出来?
- POJ1163 The Triangle
- XSS 和 CSRF 详解
- 微信开发者工具git 删除项目