• 使用apscheduler实现定时


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

    二、安装:
    pip install apscheduler

    三、基本概念
    1. APScheduler四大组件:
    触发器 triggers :用于设定触发任务的条件
    任务储存器 job stores:用于存放任务,把任务存放在内存或数据库中
    执行器 executors: 用于执行任务,可以设定执行模式为单线程或线程池
    调度器 schedulers: 把上方三个组件作为参数,通过创建调度器实例来运行
    1.1 触发器 triggers
    触发器包含调度逻辑。每个任务都有自己的触发器,用于确定何时应该运行作业。除了初始配置之外,触发器完全是无状态的。

    1.2 任务储存器 job stores
    默认情况下,任务存放在内存中。也可以配置存放在不同类型的数据库中。如果任务存放在数据库中,那么任务的存取有一个序列化和反序列化的过程,同时修改和搜索任务的功能也是由任务储存器实现。
    注意一个任务储存器不要共享给多个调度器,否则会导致状态混乱

    1.3 执行器 executors
    任务会被执行器放入线程池或进程池去执行,执行完毕后,执行器会通知调度器。

    1.4 调度器 schedulers
    一个调度器由上方三个组件构成,一般来说,一个程序只要有一个调度器就可以了。开发者也不必直接操作任务储存器、执行器以及触发器,因为调度器提供了统一的接口,通过调度器就可以操作组件,比如任务的增删改查

    2. APScheduler有三种内置的触发器:
    date 日期:触发任务运行的具体日期
    interval 间隔:触发任务运行的时间间隔
    cron 周期:触发任务运行的周期
    calendarinterval:当您想要在一天中的特定时间以日历为基础的间隔运行任务时使用
    一个任务也可以设定多种触发器,比如,可以设定同时满足所有触发器条件而触发,或者满足一项即触发。

    2.1 date 是最基本的一种调度,作业任务只会执行一次。它表示特定的时间点触发。它的参数如下:
    参数 说明
    run_date(datetime or str) 任务运行的日期或者时间
    timezone(datetime.tzinfo or str) 指定时区

    代码:
    from apscheduler.schedulers.blocking import BlockingScheduler
    #创建执行的scheduler
    scheduler = BlockingScheduler()
    def works():
    print(1111)
    scheduler.add_job(works,'data',run_date=datetime.datetime(2020,12,4,15,54,0))#定时运行,只运行一次
    scheduler.start()#启动scheduler


    2.2 interval 周期触发任务
    固定时间间隔触发。interval 间隔调度,参数如下:
    参数 说明
    weeks(int) 间隔几周
    days(int) 间隔几天
    hours(int) 间隔几小时
    minutes(int) 间隔几分钟
    seconds(int) 间隔多少秒
    start_date(datetime or str) 开始日期
    end_date(datetime or str) 结束日期
    timezone(datetime.tzinfo or str) 时区

    代码:
    from apscheduler.schedulers.blocking import BlockingScheduler
    #创建执行的scheduler
    scheduler = BlockingScheduler()
    def works():
    print(1111)
    #interval触发器,固定时间间隔触发,每两秒运行一次
    scheduler.add_job(works, 'interval', seconds=2)
    scheduler.start()#启动scheduler


    2.3 cron 触发器
    在特定时间周期性地触发,和Linux crontab格式兼容。它是功能最强大的触发器。
    cron 参数:
    参数 说明
    year(int or str) 年,4位数字
    month(int or str) 月(范围1-12)
    day(int or str) 日(范围1-31)
    week(int or str) 周(范围1-53)
    day_of_week(int or str) 周内第几天或者星期几(范围0-6或者mon,tue,wed,thu,fri,stat,sun)
    hour(int or str) 时(0-23)
    minute(int or str) 分(0-59)
    second(int or str) 秒(0-59)
    start_date(datetime or str) 最早开始日期(含)
    end_date(datetime or str) 最晚结束日期(含)
    timezone(datetime.tzinfo or str) 指定时区

    代码:
    from apscheduler.schedulers.blocking import BlockingScheduler
    #创建后台执行的scheduler
    scheduler = BlockingScheduler()
    def works():
    print(1111)
    #interval触发器,固定时间间隔触发,每两秒运行一次
    scheduler.add_job(works,'cron',day_of_week='1,3,6',hour='6',minute='30')
    scheduler.start()#启动scheduler

  • 相关阅读:
    bzoj 1013: [JSOI2008]球形空间产生器sphere
    bzoj 1012: [JSOI2008]最大数maxnumber
    bzoj 1010: [HNOI2008]玩具装箱toy
    bzoj 1008: [HNOI2008]越狱
    bzoj 1007: [HNOI2008]水平可见直线
    UVa12105 越大越好
    POJ
    最优点配对问题(紫书)
    Ned 的难题
    UVA
  • 原文地址:https://www.cnblogs.com/dcpb/p/14093576.html
Copyright © 2020-2023  润新知