Flask执行定时任务
Posted Flask中文论坛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask执行定时任务相关的知识,希望对你有一定的参考价值。
前言:
Flask运行的WEB应用的时候可能需要到定时执行一些程序,这个时候就需要用到APScheduler或者Celery来实现这一功能了。
本文中将使用APScheduler来实现定时更新数据库的操作。
# 首先安装APScheduler
在虚拟环境下安装apscheduler
venv\scripts\activate
pip install apscheduler
# mange.py
# 引入
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
from datetime import datetime
import atexit
...
# 实例化BackgroundScheduler对象
scheduler = BackgroundScheduler()
scheduler.start()
# 定义一个定时执行的函数,这个定时执行的函数将会将User表中的第一个用户的年龄加1
def add_age():
user = User.query.filter().first()
user.age += 1
db.session.commit()
now = str(datetime.now())
print(now)
print(user.age)
# 接下来定义一个间隔n长时间循环执行任务
scheduler.add_job(
func=add_age,
trigger=IntervalTrigger(seconds=1),
id='add_age',
name='add_age',
replace_existing=True)
# 退出应用的时候结束这个任务
atexit.register(lambda: scheduler.shutdown())
接下来运行整个应用
python manage.py runserver
就会看到,每隔1s会输出当前增加后的User的age值
加入大家在现有的flask项目中增加apscheduler任务操作数据库的时候提示找不到db的话,记得数据库的操作要写在上下文的环境下运行,即用
def add_age():
with app.app_context():
...
一些数据库操作
不过在执行完操作后,记得使用db.session.remove()移除数据库的会话。
除了支持循环操作,apscheduler还支持cron table的模式去跑一些定时的任务,这里我们跑一个18:00执行的任务,
# mange.py
scheduler.add_job(
func=add_age,
trigger="cron",
month="1-12",
hour="18",
day_of_week="0-6"
)
这里面的参数month=1-12, hour=18指一整年1-12月的18时执行这个add_age的函数。
其他的参数大家可以到apscheduler这个包的主页查看文档
可以看到到了18点的时候这个后台任务定时执行了一次
链接:https://share.weiyun.com/fe4ff1def379e8475ce1984f85a65f40 (密码:1fGhzI)
以上是关于Flask执行定时任务的主要内容,如果未能解决你的问题,请参考以下文章
Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库