首页 > 编程语言 >python apscheduler 定时任务的基本使用-5-添加任务

python apscheduler 定时任务的基本使用-5-添加任务

时间:2023-03-28 10:44:13浏览次数:57  
标签:name python job datetime apscheduler 任务 添加 date

python apscheduler 定时任务的基本使用-5-添加任务

1、添加定时任务

可以随时随地添加任务,不论调度器是否启动。如果未启动时,添加了定时任务,则会在调度器启动时,正常执行该任务。

添加方式有下面两种

1.1、通过add_job()函数添加

使用 add_job 方法添加任务,会返回一个Job对象,可以用于后续修改或删除任务,这是最普遍的添加任务的方式

例如

def add_job():
    # 使用 add_job 方法添加任务 返回一个Job对象 可以用于后续修改或删除任务
    date = datetime.datetime.now() + datetime.timedelta(seconds=20)  # 可以添加datetime对象作为运行时间
    job = scheduler.add_job(my_job, trigger='date', args=['墨玉麒麟', 18], name="墨玉麒麟JOB", run_date=date,
                            timezone=shanghai)
    print(f'job:{job}')
    scheduler.print_jobs()

1.2、通过装饰器scheduled_job()添加

使用装饰器时,需要先实例化出一个调度器对象,然后调用调度器对象的scheduled_job方法

@scheduler.scheduled_job('date', args=('装饰器参数',), run_date=run_date, name="装饰器", timezone=shanghai)
def my_job2(name):
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log(f"这是由装饰器添加的任务, 名称是:{name}  现在时间:{now}")

说明:

  • scheduler.scheduled_job中的scheduler是创建出的调度器对象

参考代码

import datetime
import threading

from apscheduler.schedulers.blocking import BlockingScheduler


def log(msg):
    t = threading.currentThread()
    name = t.name
    ident = t.ident
    print(f"[{ident}][{name}]{msg}")  # 打印线程号和线程名称


def my_job(name, age):
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log(f"我是{name}, 今年{age}岁, 现在时间:{now}")
    scheduler.print_jobs()


def add_job():
    # 使用 add_job 方法添加任务 返回一个Job对象 可以用于后续修改或删除任务
    date = datetime.datetime.now() + datetime.timedelta(seconds=20)  # 可以添加datetime对象作为运行时间
    job = scheduler.add_job(my_job, trigger='date', args=['墨玉麒麟', 18], name="墨玉麒麟JOB", run_date=date,
                            timezone=shanghai)
    print(f'job:{job}')
    scheduler.print_jobs()


log(f'我是主线程, 现在时间:{datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}')
shanghai = 'Asia/Shanghai'
scheduler = BlockingScheduler()  # 默认存储在内存,执行线程最大10个

run_date = datetime.datetime.now() + datetime.timedelta(seconds=30)


@scheduler.scheduled_job('date', args=('装饰器参数',), run_date=run_date, name="装饰器", timezone=shanghai)
def my_job2(name):
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log(f"这是由装饰器添加的任务, 名称是:{name}  现在时间:{now}")


add_job()

scheduler.print_jobs()

scheduler.start()
# 使用了BlockingScheduler 则无法执行start后面的代码

2、添加任务公共参数

添加任务时,我们根据触发器会添加对应的参数,除了这些参数外,有一些公共的参数,如下

  • func 要执行的函数
  • trigger 触发器
  • args 执行函数的参数
  • kwargs 执行函数的字典类型参数
  • id 定时任务唯一标识
  • name 任务的名称
  • misfire_grace_time 任务执行的容错时间
    • 假设任务运行时间为10:50:00 但是系统死机了,重启系统后 现在已经是10:50:10了,如果设置了misfire_grace_time=20,则会继续运行该任务,否则不会运行该任务
    • 一般报错Run time of job "" was missed by xxx 可以通过调大该参数解决
    • 如果超过了任务执行时间N秒了,任务就不会运行了,但是设置misfire_grace_time 大于等于N,则会运行
  • coalesce 任务堆叠后是否只执行最后一个任务
    • 如果任务超时了好久,且设置了misfire_grace_time ,堆积了多个任务,设置为True后,只会跑一个,否则跑多个
  • max_instances 最大运行的任务数
  • next_run_time 何时开始运行
  • jobstore 存储器
    • 指定存储器,可以指定多个存储器,然后添加任务时,可以通过该参数指定数据存到哪一个数据库中
    • 可以参考【python apscheduler 定时任务的基本使用-6-sqlite数据库】的例子
  • executor 执行器
  • replace_existing 如果ID重复,是否替换任务

github

标签:name,python,job,datetime,apscheduler,任务,添加,date
From: https://www.cnblogs.com/rainbow-tan/p/17264230.html

相关文章

  • python一个带参数脚本调用另一个带参数的脚本 问题
    python  a.pymain:args=argget.parse_args(args=[])b.funa() pythonb.pydeffuna():args=argget.parse_args() 当两个py文件都需要arg参数的......
  • 练习04_Python常用库
    本周我们一起来了解一下:python库的导入数据分析常用python库:Numpy,SciPy,Matplotlib,pandas,StatsModels,scikit-learn,keraspython库的导入前两周我们练习......
  • 在python的setup.py中如何指定多个extra-index-url?
    [本文出自天外归云的博客园]以下内容来自chatGPT的回答(正解,已验证)问题:在pythonsetup.py中如何指定多个extra-index-url?在`setup.py`文件中,我们可以使用`setuptools`......
  • Python毕业设计推荐
    今天给大家推荐4个基于python的毕业设计/课程设计1.网上商城系统这是一个基于python+vue开发的商城网站,平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的......
  • Python八大数据类型内置方法(不是详细讲解)
    目录一、字符串str二、列表list三、字典dict四、元组tuple五、集合set首先Python八大数据类型之间可以转换,但是有时候不是通用即需要特定条件才可以转换,不过日常开发工作......
  • python-01
    一:python2和python3的区别:1.python2中没有默认编码格式,如果遇到中英文的内容需要做声明coding=utf-8,python3已经默认系统中有coding=utf-8的编码格式print语句在python2......
  • python-03
    1、if判断语句1.单分支 :如果 。。。。否则就。。。。 if  +条件判断   如果满足条件就执行语句1     语句1 else:           否则就执行语......
  • python-02
    python的数据类型:字符串、列表、字典、元组、集合一:python当中的索引 index索引分:正向索引和负向索引 正向索引是从0开始,负向索引是从-1开始str1='abcdef'print(str1......
  • python-04
    python函数的定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段python当中函数分为:内置函数,自定义函数自定义函数:结合自己的业务场景自定义一个函数来实......
  • python-05
    python模块的定义;Python模块(Module),是一个Python文件,以.py结尾,包含了Python对象定义和Python语句。模块让你能够有逻辑地组织你的Python代码段。把相关的代码分配到一......