Python APScheduler定时任务框架

Python · 03-26

1. Trigger 触发器

包含调度逻辑,每一个作业有它自己的触发器,用于决定接下来哪一个作业会运行。除了它们自己初始配置以外,触发器完全是无状态的。

  • date: 特定的时间点触发
  • interval: 固定时间间隔触发
  • cron: 在特定时间周期性地触发

1.1 date 触发器

参数说明
run_date (datetime or str)任务运行的日期或者时间
timezone (datetime.tzinfo or str)指定时区

Example:

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

scheduler = BlockingScheduler()

def my_job(text):
    print(text)

# 触发类型
trigger_type = 'date'
# 触发条件
trigger_props = {
    'run_date': datetime.strptime('2022-05-24 17:40:00', '%Y-%m-%d %H:%M:%S')
}

scheduler.add_job(my_job, trigger_type, **trigger_props, args=['hello world'])
scheduler.start()

1.2 interval 触发器

参数说明
weeks (int)间隔几周
days (int)间隔几天
hours (int)间隔几小时
minutes (int)间隔几分钟
seconds (int)间隔多少秒
start_date (datetime 或 str)开始日期
end_date (datetime 或 str)结束日期

Example:

# 触发类型
trigger_type = 'interval'
# 触发条件
trigger_props = {
    'minutes': 1    # 间隔1分钟运行(并不是每分钟的第一秒运行)
}

scheduler.add_job(my_job, trigger_type, **trigger_props, args=['hello world'])
scheduler.start()

1.3 crontab 触发器

参数说明
year (int 或 str)表示四位数的年份 (2019)
month (int\ str)月 (范围1-12) 可以是int类型,也可以是str类型
day (int\ str)日 (范围1-31)
week (int\ str)周 (范围1-53)
day_of_week (int\ str)表示一周中的第几天,既可以用0-6表示也可以用其英语缩写表示
hour (int\ str)表示取值范围为0-23时
minute (int\ str)表示取值范围为0-59分
second (int\ str)表示取值范围为0-59秒
start_date (datetime\ str)表示开始时间 可以是datetime类型,也可以是str类型
end_date (datetime\ str)表示结束时间
timezone (datetime.tzinfo\ str)表示时区取值

Example:

# 触发类型
trigger_type = 'cron'
# 触发条件
trigger_props = {
    # 指定年份
    'year': 2022,
    # 指定3-6月
    'month': '3-6',
    # 每周二、周三、周四
    'day_of_week': 'tue,wed,thu',
    # 每小时
    'hour': '*',
    # 第一分钟
    'minute': '1',
    # 每隔5秒
    'second': '*/5'
}

scheduler.add_job(my_job, trigger_type, **trigger_props, args=['hello world'])
scheduler.start()
Theme Jasmine by Kent Liao