一文详解Python定时任务触发

目录
  • 1.新建调度器schedulers
  • 2.添加调度任务trigger
  • 3.运行调度任务
  • 4.特点,其他操作

APScheduler

APScheduler 四个组件分别为:

调度器(scheduler)、触发器(trigger),作业存储(job store),执行器(executor)

安装命令:

pip install setuptools
pip install --ignore-installed apscheduler

1.新建调度器schedulers

BlockingScheduler : 调度器在当前进程的主线程中运行,也就是会阻塞当前线程

BackgroundScheduler : 调度器在后台线程中运行,不会阻塞当前线程

import datetime as dt
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler()

2.添加调度任务trigger

① date 触发器:(指定时间点触发),参数如下:

  • run_date(datetime或str):任务运行的日期或时间
  • timezone(datetime.tzinfo或str):指定时区
# 例1:在 2020-9-24 时刻运行一次 func 方法
scheduler.add_job(func, 'date', run_date = dt.date(2020, 9, 24))
# 例2: 在 2020-9-24 15:10:00 时刻运行一次 func 方法
scheduler.add_job(func, 'date', run_date = dt.datetime(2020, 9, 24, 15, 10, 0))
# 例3: 在 2020-9-24 15:11:00 时刻运行一次 func 方法
scheduler.add_job(func, 'date', run_date = '2020-9-24 15:11:00')

② interval 触发器: (固定时间间隔触发),参数如下:

  • weeks(int):间隔几周
  • days(int):间隔几天
  • hours(int):间隔几小时
  • minutes(int):间隔几分钟
  • seconds(int):间隔几秒钟
  • start_date(datetime或str):开始时间
  • end_date(datetime或str):结束时间
  • timezone(datetime.tzinfo或str):时区
# 例1:每隔两分钟执行一次 func 方法
scheduler.add_job(func, 'interval', minutes = 2)
# 例2:在 2020-9-24 15:15:00 ~ 2020-9-24 15:20:00 之间, 每隔两分钟执行一次 func 方法
scheduler.add_job(func, 'interval', minutes = 2, start_date = '2020-9-24 15:15:00' ,
                  end_date = '2020-9-24 15:20:00')

③ cron 触发器:(在指定时间周期性地触发),参数如下:

  • year(int 或 str):年
  • month(int 或 str):月
  • day(int 或 str):日
  • week(int 或 str):周(1-53)
  • day_of_week(int 或 str):星期几(0-6)
  • hour(int 或 str):时
  • minute(int 或 str):分
  • second(int 或 str):秒
  • start_date(datetime或str):最早开始时间(包含)
  • end_date(datetime或str):最晚结束时间(包含)
  • timezone(datetime.tzinfo或str):指定时区

字符 :

1. * 每一(每一分)

2. ? 表示不关心,任意

3. - 范围 (小时:1-12,1到12点运行)

4. , 标示多个值 (小时 1,2,3 1点2点3点运行)

5. / 递增触发(0/15,从0开始每15秒运行一次)

6. L 最后(日L,当月最后一天,周L周六)

7. W 指定日期最近的工作日(周一到周五)

8. # 序号(表示每月的第几个周几)

# 例:在每年 1-3、7-9 月份中的每个星期一、二中的 00:00, 01:00, 02:00 和 03:00 执行 func 任务
scheduler.add_job(func, 'cron', month = '1-3,7-9',day='0, tue', hour='0-3')

3.运行调度任务

scheduler.start()

3.1 测试时间

def forecast_adjust():
    now_temp = datetime.now()
    print('执行方案一', now_temp, '时间间隔: ', now_temp-t0)

def for2():
    now_temp = datetime.now()
    print('执行方案二', now_temp, '时间间隔: ', now_temp-t0)

def fortime3():
    now_temp = datetime.now()
    print('执行方案三', now_temp, '时间间隔: ', now_temp-t0)
    return '9999999999999'

def a__():
    b = scheduler.add_job(fortime3, 'cron', hour='15', minute = '18')
    c = scheduler.add_job(fortime3, 'cron', hour='15', minute = '30')
    d = scheduler.add_job(fortime3, 'cron', hour='15', minute = '45')
    print(b)
    print(c)
    print(c)
    return 'kkkqq'

t0 = datetime.now()
scheduler = BlockingScheduler()  # 采用阻塞的方式
scheduler.add_job(func=forecast_adjust,
                  trigger=CronTrigger(minute="*/1", second=20,
                                      timezone=tz_now), args=[])

scheduler.add_job(func=for2,
                  trigger=CronTrigger(minute="*/5", second=10,
                                      timezone=tz_now), args=[])

k = a__()
print(k)
scheduler.start()

4.特点,其他操作

APScheduler 定点、定时:

四个组件分别为:触发器(trigger),作业存储器(job store),执行器(executor),调度器(scheduler)

(1)job stores:对调度任务的管理:

① 添加job:

# add_job():可以改变或者移除 job
scheduler.add_job(func, 'interval', minutes = 2)

# scheduled_job():只适用于应用运行期间不会改变的 job
scheduler.scheduled_job(func, 'interval', minutes = 2)

②移除job:

# remove_job() :根据 job 的 id 来移除,所以要在 job 创建的时候指定一个 id
scheduler.add_job(func, 'interval', minutes = 2, id = 'job_one')
scheduler.remove_job(job_one)

# job.remove() :对 job 执行 remove 方法
job = add_job(func, 'interval', minutes = 2, id = 'job_one')
job.remvoe()

③ 暂停job:

apscheduler.job.Job.pause()
apscheduler.schedulers.base.BaseScheduler.pause_job()

④ 恢复job:

apscheduler.job.Job.resume()
apscheduler.schedulers.base.BaseScheduler.resume_job()

⑤ 修改job:

# modify_job()
scheduler.modify_job('job_one', minutes = 5)

# job.modify()
job = scheduler.add_job(func, 'interval', minutes = 2)
job.modify(minutes = 5)

⑥ 关闭job:

scheduler.shutdown()
scheduler.shutdown(wait=false)

(2)executors:执行调度任务的模块,常用的 executor 有两种:

ProcessPoolExecutor
ThreadPoolExecutor

到此这篇关于一文详解Python定时任务触发的文章就介绍到这了,更多相关Python定时任务内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python命令行定时任务自动化工作流程

    目录 1.使用场景 2.库 3.运行脚本 4.脚本 5.python常用的定时任务 6.四种方法用python调用命令行 1.使用场景 定时执行jmeter脚本,通过python定时器隔一段时间执行命令行命令. 2.库 os.datetime.threading (1)利用threading.Timer()定时器实现定时任务 Timer方法 说明 Timer(interval, function, args=None, kwargs=None) 创建定时器 cancel() 取消定时器 star

  • Python 命令行解析工具 argparse基本用法

    在工作中,我们经常需要从命令行当中解析出指定的参数,而 Python 也提供了相应的标准库来做这件事情,比如 sys, optparse, getopt, argparse.这里面功能最强大的莫过于 argparse,下面就来看看它用法. import argparse # 使用 argparse 分为以下几步 # 1. 创建命令行解析器对象 parse = argparse.ArgumentParser( description="这是命令行解析器" ) # 2.给解析器添加命令行参

  • Python中命令行参数argparse模块的使用

    目录 传入一个参数 位置参数 可选参数 默认参数 必需参数 argparse 模块是Python内置的用于命令项选项与参数解析的模块,可以轻松编写友好的命令行接口,能够帮助程序员为模型定义参数. 传入一个参数 add_argument()中的type参数表示传入参数的数据类型 import argparse #定义命令行解析器对象 parser = argparse.ArgumentParser(description='参数说明') #添加命令行参数 parser.add_argument('

  • python定时任务sched库用法简单实例

    目录 前言 示例代码: 运行结果: 补充:解析 总结 前言 sched是Python的内置模块,用于事件调度,可在安全的在多线程环境中轻松实现定时任务. sched是一种调度(延时处理机制). sched是python内置库,不需要安装. 示例代码: import sched import time from datetime import datetime # 初始化sched模块的scheduler类 # 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞. sched

  • python定时任务timeloop库用法实例详解

    Timeloop是一个库,可用于运行多周期任务.这是一个简单的库,使用decorator模式在线程中运行标记函数. 首先安装timeloop库: pip install timeloop 示例代码: from datetime import datetime, timedelta from timeloop import Timeloop tl = Timeloop() def task(): now = datetime.now() ts = now.strftime("%Y-%m-%d %H

  • 一文详解Python定时任务触发

    目录 1.新建调度器schedulers 2.添加调度任务trigger 3.运行调度任务 4.特点,其他操作 APScheduler APScheduler 四个组件分别为: 调度器(scheduler).触发器(trigger),作业存储(job store),执行器(executor) 安装命令: pip install setuptools pip install --ignore-installed apscheduler 1.新建调度器schedulers BlockingSched

  • 一文详解Golang 定时任务库 gron 设计和原理

    目录 cron 简介 gron 定时参数 源码解析 Cron Entry 按照时间排序 新增定时任务 启动和停止 Schedule 扩展性 经典写法-控制退出 结语 cron 简介 在 Unix-like 操作系统中,有一个大家都很熟悉的 cli 工具,它能够来处理定时任务,周期性任务,这就是: cron. 你只需要简单的语法控制就能实现任意[定时]的语义.用法上可以参考一下这个Crontab Guru Editor,做的非常精巧. 简单说,每一个位都代表了一个时间维度,* 代表全集,所以,上面

  • 一文详解Python中生成器的原理与使用

    目录 什么是生成器 迭代器和生成器的区别 创建方式 生成器表达式 基本语法 生成器函数 yield关键字 yield和return yield的使用方法 生成器函数的基本使用 send的使用 可迭代对象的优化 总结 我们学习完推导式之后发现,推导式就是在容器中使用一个for循环而已,为什么没有元组推导式? 原因就是“元组推导式”的名字不是这样的,而是叫做生成器表达式. 什么是生成器 生成器表达式本质上就是一个迭代器,是定义迭代器的一种方式,是允许自定义逻辑的迭代器.生成器使用generator表

  • 一文详解Python中PO模式的设计与实现

    目录 什么是PO模式 PO 三层模式 PO 设计模式的优点 将改写的脚本转为PO设计模式 构建基础的 BasePage 层 构建首页的 Page 层(HomePage) 构建登录页的 Page 层(LoginPage) 构建 首页 - 订单 - 支付 流程的 Page 层(OrderPage) PO 设计模式下测试Case的改造 在使用 Python 进行编码的时候,会使用自身自带的编码设计格式,比如说最常见的单例模式,稍微抽象一些的抽象工厂模式等等… 在利用 Python 做自动化测试的时候,

  • 一文详解Python中的重试机制

    目录 介绍 1. 最基本的重试 2. 设置停止基本条件 3. 设置何时进行重试 4. 重试后错误重新抛出 5. 设置回调函数 介绍 为了避免由于一些网络或等其他不可控因素,而引起的功能性问题.比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题. 这种情况下,我们通常会在代码中加入重试的代码.重试的代码本身不难实现,但如何写得优雅.易用,是我们要考虑的问题. 这里要给大家介绍的是一个第三方库 - Tenacity (标题中的重试机制并并不准确,它不是 Python 的内置模块,因此并不能称

  • 一文详解Python如何优雅地对数据进行分组

    假设我们有这样一种数据: data = [     ("apple", 30), ("apple", 35),     ("apple", 32), ("pear", 60),     ("pear", 32), ("pear", 60),     ("banana", 102), ("banana", 104) ] # 我们希望变成如下格式 &q

  • 一文详解Python中复合语句的用法

    目录 Python复合语句 1.if 语句 2.while 语句 3.for 语句 4.try 语句 5.with 语句 6.match 语句 Python复合语句 复合语句是包含其它语句(语句组)的语句:它们会以某种方式影响或控制所包含其它语句的执行.通常,复合语句会跨越多行,虽然在某些简单形式下整个复合语句也可能包含于一行之内. if.while和for语句用来实现传统的控制流程构造.try语句为一组语句指定异常处理和/和清理代码,而with语句允许在一个代码块周围执行初始化和终结化代码.函

  • 一文详解Python中的Map,Filter和Reduce函数

    目录 1. 引言 2. 高阶函数 3. Lambda表达式 4. Map函数 5. Filter函数 6. Reduce函数 7. 总结 1. 引言 本文重点介绍Python中的三个特殊函数Map,Filter和Reduce,以及如何使用它们进行代码编程.在开始介绍之前,我们先来理解两个简单的概念高阶函数和Lambda函数. 2. 高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 举例如下: def higher(your_function, som

  • 一文详解Python灰色预测模型实现示例

    目录 前言 一.模型理论 特点 二.模型场景 1.预测种类 2.适用条件 三.建模流程 1.级比校验 3.系数求解 4.残差检验与级比偏差检验 四.Python实例实现 总结 前言 博主参与过大大小小十次数学建模比赛,也获得了不少建模奖项.对于一些小批量样本数据去做预测或者是评估其规律性的话,比较适合的模型一般都是选择灰色预测模型.该模型解释性强而且易于理解,建模手段也比较简单.在一些不确定是否存在相关标量或者是存在位置特征的时候,用灰色预测模型尤为明显,牵扯太多变量时候可以以量曾量减的方式显现

  • 一文详解Python中实现单例模式的几种常见方式

    目录 Python 中实现单例模式的几种常见方式 元类(Metaclass): 装饰器(Decorator): 模块(Module): new 方法: Python 中实现单例模式的几种常见方式 元类(Metaclass): class SingletonType(type): """ 单例元类.用于将普通类转换为单例类. """ _instances = {} # 存储单例实例的字典 def __call__(cls, *args, **kwa

随机推荐