from flask_apscheduler import
APSchedulerscheduler = APScheduler()
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
import time
def my_job():
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
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')