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配置文件

flask 之定时任务开发

Flask+APScheduler定时任务

Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库

flask-web APScheduler 定时任务以及实际应用

APScheduler的简单记录