Python APScheduler简单使用

161 阅读2分钟

引入

Python中定时任务(计划任务)最常用的解决方案就是 APScheduler

APScheduler全称Advanced Python Scheduler作用为在指定的时间规则执行指定的作业

官方文档

安装

pip install apscheduler

基本使用

调度器

  • BlockingScheduler 阻塞式调度器
  • BackgroundScheduler 后台调度器(非阻塞)

添加计划任务

scheduler.add_job(func, trigger=None, args=None, kwargs=None, .... , **trigger_args)

trigger: 触发器(可选):date, interval, cron

args: 用于调用func的位置参数列表

更多参考:add_job

触发器

1. date触发器

在某个日期时间只触发一次事件。示例代码如下:

from datetime import date
from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

def task(text):
    print(text)
    
sched.add_job(task,'date',run_date=date(2022,2,2),args=['附加参数'])

sched.start()

更多参考:date

2. interval触发器

想要在固定的时间间隔触发事件。interval的触发器可以设置以下的触发参数:

  1. weeks:周。整形。
  2. days:一个月中的第几天。整形。
  3. hours:小时。整形。
  4. minutes:分钟。整形。
  5. seconds:秒。整形。
  6. start_date:间隔触发的起始时间。
  7. end_date:间隔触发的结束时间。
  8. jitter:触发的时间误差。

更多参考:interval

3. cron触发器(常用)

在某个确切的时间周期性的触发事件。可以使用的参数如下:

  1. year:4位数字的年份
  2. month:1-12 月份
  3. day:1-31 日
  4. week:1-53 周
  5. day_of_week: 0-6 或 'mon'、'tue'、'wed'、'thu'、'fri、'sat'、'sun'
  6. hour: 0-23 小时
  7. minute: 0-59 分钟
  8. second: 0-59 秒
  9. start_date: datetime类型 或者 字符串类型,起始时间。
  10. end_date: datetime类型 或者 字符串类型,结束时间。
  11. timezone:时区。
  12. jitter:任务触发的误差时间。

示例如下:

def task():
    scheduler = BlockingScheduler()
    scheduler.add_job(tick,"cron",day="4th sun",hour=20,minute=1)

也可以用表达式类型:

表达式可用字段描述
*任何在每个值都触发
*/a任何每隔a触发一次
a-b任何在a-b区间内任何一个时间触发(a<b)
a-b/c任何在a-b区间内每隔c触发一次
xth yday第x个星期y触发
last xday最后一个星期x触发
x,y,z任何可以把上面的表达式进行组合

更多参考:cron