flask_apscheduler
网上很多文章包括官网给出来的,更多的是执行的函数和初始话app在同一文件
按照app 路由 模型类 视图 往下延申,项目已经成型,所以上述的方法不适用。
(不用操心模型类与app互相导入的错误)下面分享一下具体流程。
安装包命令
pip3 install flask_apscheduler
新建一个文件 apscheduler.py
from flask_apscheduler import APScheduler
scheduler = APScheduler()
在flask.app初始化的地方加入
flask_apscheduler
from apps.scheduler import scheduler
因为初始化的时候会执行,如果不加这个判断,就会才有重复调用的报错,
报警了也是不影响执行,避免debug预警,所以加个判断
if scheduler.app is None:
scheduler.init_app(app)
scheduler.start()
在视图函数上引入,因为是自动执行就和路由函数做成区分
@scheduler.task('cron', id='随便写,有辨识性就行', day_of_week='*', hour=4) # 每天的四点执行
def xxx():
print('')
如果报错提示 Working outside of application context,在函数中加入这一句
with scheduler.app.app_context():
User.query.all()
间隔执行(示例)
每天凌晨1点30分50秒执行一次
@scheduler.task('cron',id='xxx', day_of_week='*', hour=1, minute='30', second='50')
每天4点执行一次
@scheduler.task('cron',id='xxx',day_of_week='*',hour=4)
Interval触发器-参数说明
weeks (int) 间隔几周
days (int) 间隔几天
hours (int) 间隔几小时
minutes (int) 间隔几分钟
seconds (int) 间隔多少秒
start_data (datetime 或者 str ) 开始时间
end_data (datetime 或者 str ) 结束时间
timezone (datetime 或者 str ) 时区
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) 间隔几小时
minute (int) 间隔几分钟
second (int) 间隔多少秒
start_data (datetime 或者 str ) 开始时间
end_data (datetime 或者 str ) 结束时间
timezone (datetime 或者 str ) 时区