Flask+APScheduler定时调度任务

Flask+APScheduler定时调度任务

      • core.py
      • factory.py
      • task.py
      • app.py
      • 触发器类型

core.py

from flask_apscheduler import 
APSchedulerscheduler = APScheduler()

factory.py

from flask import Flask

from core import scheduler


def create_app():
    app = Flask(__name__)
    # 配置任务,不然无法启动任务
    app.config.update(
        {"SCHEDULER_API_ENABLED": True,
         "JOBS": [{"id": "my_job",  # 任务ID
                   "func": "task:my_job",  # 任务位置
                   "trigger": "cron",  # 触发器
                   "day_of_week": "mon-fri",  # 时间间隔
                   "hour": "9-14",  # 时间间隔
                   "minute": "0,5,10,15,20,25,30,35,40,45,50,55",
                   # 执行的分钟
                   }
                  ]}
    )
    scheduler.init_app(app)
    scheduler.start()
    return app

task.py

import time


def my_job():
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))

app.py

from factory import create_app

app = create_app()


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

这里使用的定时的触发器用的是cron

触发器类型

当你调度作业的时候,你需要为这个作业选择一个触发器,用来描述这个作业何时被触发,APScheduler有三种内置的触发器类型:

date 一次性指定日期
interval 在某个时间范围内间隔多长时间执行一次
cron 和Linux crontab格式兼容,最为强大

  • date

    最基本的一种调度,作业只会执行一次。它的参数如下:

    run_date (datetime|str) – 作业的运行日期或时间
    timezone (datetime.tzinfo|str) – 指定时区

# 2016-12-12运行一次job_function
sched.add_job(job_function, 'date', run_date=date(2016, 12, 12), args=['text'])
# 2016-12-12 12:00:00运行一次job_function
sched.add_job(job_function, 'date', run_date=datetime(2016, 12, 12, 12, 0, 0), args=['text'])
  • 间隔调度(interval)

    参数如下:

    weeks (int) – 间隔几周
    days (int) – 间隔几天
    hours (int) – 间隔几小时
    minutes (int) – 间隔几分钟
    seconds (int) – 间隔多少秒
    start_date (datetime|str) – 开始日期
    end_date (datetime|str) – 结束日期
    timezone (datetime.tzinfo|str) – 时区

# 每两个小时调一下job_function
sched.add_job(job_function, 'interval', hours=2)
  • cron

    参数如下:

    year (int|str) – 年,4位数字
    month (int|str) – 月 (范围1-12)
    day (int|str) – 日 (范围1-31)
    week (int|str) – 周 (范围1-53)
    day_of_week (int|str) – 周内第几天或者星期几 (范围0-6 或者 mon,tue,wed,thu,fri,sat,sun)
    hour (int|str) – 时 (范围0-23)
    minute (int|str) – 分 (范围0-59)
    second (int|str) – 秒 (范围0-59)
    start_date (datetime|str) – 最早开始日期(包含)
    end_date (datetime|str) – 最晚结束时间(包含)
    timezone (datetime.tzinfo|str) – 指定时区

# job_function将会在6,7,8,11,12月的第3个周五的1,2,3点运行
sched.add_job(job_function, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3')
# 截止到2016-12-30 00:00:00,每周一到周五早上五点半运行job_function
sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour=5, minute=30, end_date='2016-12-31')

你可能感兴趣的:(python,flask)