APScheduler 使用汇总

APScheduler:全能的任务调度库,全称是 Advanced Python Scheduler,一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔固定时间点(日期)Linux 下的 Crontab 命令。同时还支持异步执行、后台执行调度任务。

安装:pip install apscheduler

cronapscheduler 用于设置定时任务;

        触发器(triggers)任务执行的调度逻辑,决定任务如何定时执行;

        任务存储器(job stores)存储了调度任务;

        执行器(executors)执行任务,含有线程池以及进程池的创建和调用等;

        调度器(schedulers)组织调用其他方面;

调度器类型

        BlockingScheduler: 阻塞式,适用于程序是进程中唯一运行的进程,调用 start函数会阻塞当前线程,不能立即返回。

        BackgroundScheduler: 非阻塞式(后台运行),适用于调度程序在应用程序的后台运行,start后主线程不会阻塞。

        AsyncIOScheduler: 当使用asyncio模块时使用

        GeventScheduler: 当使用gevent模块时使用

        TornadoScheduler: 构建Tornado应用时使用

        TwistedScheduler: 构建Twisted应用时使用

        QtScheduler: 构建Qt应用时使用

常用的是非阻塞式的BackgroundScheduler,通常定时任务都会在放到web服务中,如果使用阻塞式,则无法启动web服务。使用非阻塞式,定时任务设定后会继续执行后面的web服务,只要web服务在运行,定时任务就是一直有效的。

触发器类型

        date:在某个时间点执行一次时使用

        interval:固定的时间间隔循环执行时使用


        cron:在特定的时间点执行时使用

        calendarinterval:在特定时间点或以日历为基础的时间间隔内执行时使用

示例

import time
from datetime import date
from datetime import datetime

from apscheduler.schedulers.background import BackgroundScheduler
# @sched.scheduled_job(trigger="interval", args=("张三", 100), seconds=3)
def do_func(name, age):
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
          + " in do func : 姓名:"+name+" 年龄:"+str(age))


def main():
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    sched = BackgroundScheduler()

    # 通过date 设置指定日期执行
    sched.add_job(do_func, trigger="date", run_date=date(2022, 5, 25), args=("张三", 100))

    # 通过datetime,设置指定日期额指定时刻执行
    sched.add_job(do_func, trigger="date", run_date=datetime(2022, 5,  25, 14, 0, 10), args=("张三", 100))

    # 直接使用文本的方式指定日期和时刻表
    sched.add_job(do_func, trigger="date", run_date="2022-05-25 14:0:20", args=("张三", 100))

    # 每3秒执行一次
    sched.add_job(do_func, trigger="interval", args=("张三", 100), seconds=3)
    # 每3分钟执行一次
    sched.add_job(do_func, trigger="interval", args=("张三", 100), minutes=3)
    # 每3小时执行一次
    sched.add_job(do_func, trigger="interval", args=("张三", 100), hours=3)
    # 每3天执行一次
    sched.add_job(do_func, trigger="interval", args=("张三", 100), days=3)
    # 每3周执行一次
    sched.add_job(do_func, trigger="interval", args=("张三", 100), weeks=3)

    # 任务会在6月、7月、8月、11月和12月的第三个周五,00:00、01:00、02:00和03:00触发
    sched.add_job(do_func, trigger="cron", month='6-8,11-12', day='3rd fri', hour='0-3', args=("张三", 100))

    sched.start()


if __name__ == "__main__":
    main()
    while True:
        print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
        time.sleep(1)

参考:

APScheduler简介_apscheduler trigger-CSDN博客

Python----使用apscheduler模块设置定时任务_from apscheduler.schedulers.background import back-CSDN博客

太好用了!Python 定时任务调度框架 APScheduler 详解! - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值