在使用Flask的APScheduler时,如何优雅的导入flask上下文

配置任务JOBS

class JobConfig:
    JOBS = [
        {
            'id': 'example',
            'func': 'job_func',
            'args': (),
            'trigger': 'interval',
            'seconds': 10
        }
    ]

上述代码中几个参数:

  1. id:自定义ID
  2. func:即你要定时执行的函数,书写规则是 ‘目录 : 函数名’,从config文件所在的目录算起
  3. args:要传入的参数
  4. trigger:任务类型,或者理解为定时器开启的方式,有三种:date表示具体的一次性任务,interval表示循环任务,cron表示定时任务,这里需要注意下如果没有指定trigger,则默认为date类型,所以如果是一次性任务,可以不用写种类

启动任务

from flask import Flask
from flask_apscheduler import APScheduler

app=Flask(__name__)
app.config.from_object(APSchedulerJobConfig)

if __name__ == "__main__":
    scheduler=APScheduler()
    scheduler.init_app(app)
    scheduler.start()
    app.run(debug=True)

编写要定时执行的函数

在定时执行的函数func的实现过程中,需要注意Flask 的 Context 机制

def job_func():
    with app.app_context():
        list_Users= db.session.query(Users).all()

为了给所有的job自动加上上下文,可以这么写,然后继承APScheduler类

from flask_apscheduler import APScheduler as _BaseAPScheduler
class APScheduler(_BaseAPScheduler):
    def run_job(self, id, jobstore=None):
        with self.app.app_context():
            super().run_job(id=id, jobstore=jobstore)

重点是为了获取上下文,with app.app_context()是必须的,需要通过create_app工厂模式等重新生成一个flask app对象

from app import create_app

def shcduler_job1():
        app = create_app(args)
    with app.app_context:
        do the job

优雅的导入flask上下文

flaskdemo.common.__init__中创建对象

scheduler = APScheduler()

在启动时初始化

if __name__ == "__main__":
    ...
    scheduler.init_app(app)
    scheduler.start()

创建定时任务时使用上下文

from flaskdemo.common import scheduler
def job_func():
    with scheduler.app.app_context():
        list_Users= db.session.query(Users).all()

原文地址:https://www.cnblogs.com/Raymon-Geng/p/12530668.html

时间: 2024-07-31 02:42:32

在使用Flask的APScheduler时,如何优雅的导入flask上下文的相关文章

用flask开发个人博客(4)—— flask中4种全局变量

https://blog.csdn.net/hyman_c/article/details/53512109 一  current_app current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活,我们以本专栏第一篇文章中写的test.py为例介绍下它的用法: 1.1 激活程序上下文 [python] view plain copy >>> from test import app >>> from flask import curren

Flask实战-留言板-使用Flask-DebugToolbar调试程序、Flask配置的两种组织形式

使用Flask-DebugToolbar调试程序 扩展Flask-DebugToolbar提供了一系列调试功能,可以用来查看请求的SQL语句.配置选项.资源加载情况等信息.这些信息在开发时会非常有用.首先使用pipenv安装Flask-DebugToolbar及其依赖: 然后实例化扩展提供的DebugToolExtension类,传入程序实例APP,以完成扩展的初始化: from flask immport Flask from flask_debugtoolbar import DebugTo

[Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题

http://www.cnblogs.com/mizhon/p/4242073.html [Eclipse] - 解决导入flask模块出现的Unresolved Import flask问题 最近想学习一下flask,在安装了flask之后在Eclipse里import flask模块的时候发现会有如下问题: Google了一圈,相应的资料都看了,这几篇有帮助(需FQ),我按照第一个参考设置了一下,红叉仍然没有去掉. 第二个博客是英文的且无图无真相,就没仔细看(但其实是解决了问题的).这里就自

flask基础之AppContext应用上下文和RequestContext请求上下文(六)

前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以单独存在的,但是请求上下文对象只有在收到请求后才会被创建.请求处理和应用上下文和请求上下文的关系是: 接收请求-->创建请求上下文-->请求上下文入栈-->创建该请求的应用上下文-->应用上下文入栈-->处理逻辑-->请求上下文出栈-->应用上下文出栈 系列文章 fl

记录flask使用模板时出现的“Internal Server Error”错误

在看<Flask Web开发实战:入门.进阶与原理解析(李辉著 )>时照着书上的代码抄了一遍,然后运行时发现一直出现以下的错误 书上的源代码如下 watchlist.html <head> <meta charset="utf-8"> <title>{{ user.username }}'s Watchlist</title> </head> <body> <a href="{{ url

Flask写web时cookie的处理

本文来自网易云社区 作者:孙圣翔 flask是一个微型web开发框架,别看他微型,在github上排名还是挺高的. A microframework based on Werkzeug, Jinja2 and good intentions http://flask.pocoo.org/ 因为他微型,容易掌握,所以对于一些控制欲很强的人,比如我,就会放弃强大的dinjgo,而转向flask. flask的入门教程,看网页的就好. 中文 英文,既然有文档了,我就不从来一遍了. 这篇文章只说cook

创建Flask实例对象时的参数和app.run()中的参数

app=Flask(name,static_folder="static",static_url_path="/aaa",template_folder="templates") __name__实际上是有值的,name=main,指的是该模块所在的目录 static_folder = "static",设置静态资源夹的名字是static static_url_path,设置访问静态资源的url前缀,若不存在该项,默认为sta

Flask:05-一首歌的时间掌握flask数据模型(01)

数据模型 数据库回顾 分类: 关系型数据库:MySQL.sqlite.- 非关系型数据库:Redis.MongoDB.- 操作: 执行原生SQL语句,每次都需要拼接SQL语句,非常繁琐而且特别容易出错. ORM(对象关系映射),使用ORM可以通过对对象的操作完成对数据库的操作. flask-sqlalchemy 说明:其实是sqlalchemy扩展库在flask中的移植库,通过了绝大多数关系型数据库的支持(ORM) 安装:pip install flask-sqlalchemy 连接地址配置:

Flask初识,第八篇,实例化Flask的参数及对app的配置

Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from flask import Flask app = Flask(__name__) # type:Flask app.config["DEBUG"] = True 这句 app.config["DEBUG"] = True 可以实现的功能可刺激了 代码只要发生改动,自动