flask 定时任务(APScheduler)使用current_app app_context()上下文

前言:

描述:flask定时任务调用的方法中使用了current_app.logger.info()记录日志报错

报错代码

python 复制代码
   raise RuntimeError(unbound_message) from None
RuntimeError: Working outside of application context.

This typically means that you attempted to use functionality that needed
the current application. To solve this, set up an application context
with app.app_context(). See the documentation for more information.

解决办法 :

1.创建 create.py文件

为了方便快速使用此代码,我把create.py非核心代码已注释掉,如下:

python 复制代码
from flask import Flask, json

# from utils.cache_helper import CacheHelper
# from utils.log_handler import LogHandler


def create_app():
    # init app
    app = Flask(__name__)
    # # 读取json配置
    # app.config.from_file("settings.json", load=json.load)
    # # 初始化Cache
    # cache = CacheHelper(app, config={'CACHE_TYPE': 'simple'})
    # # 添加日志配置
    # for log_handler in LogHandler.get_log_handlers():
    #     app.logger.addHandler(log_handler)
    return app

2.定时任务调用的方法中代码如下

引入create.py文件中create_app()方法
python 复制代码
from create import create_app
方法一
python 复制代码
   @classmethod
    def my_job(cls):
        # 此方法在定时任务多的情况下,会有性能问题,少的情况没啥问题
        app = create_app()
        with app.app_context():
            current_app.logger.info("my_job已执行")
            print(f"my_job,当前时间{datetime.now()}")
方法二 (推荐)

添加APP全局变量

python 复制代码
from create import create_app

APP = None


def get_app():
    global APP
    APP = APP if APP is not None else create_app()

定时任务调用的方法中使用如下

提示with APP.app_context():不要写成with APP.app_context: 会报错,因为app_context是一个方法而不是一个属性,所以要写成app_context(),加上括号

python 复制代码
 @classmethod
    def my_job(cls):      
        # 使用全局APP变量
        get_app()
        with APP.app_context():
            current_app.logger.info("my_job已执行")
            print(f"my_job,当前时间{datetime.now()}")

3.执行效果

总结:

flask定时任务(APScheduler)的使用,链接如下: https://blog.csdn.net/weixin_41934979/article/details/140245835

结合上边链接,就是完整的flask 定时任务(APScheduler)使用current_app的全过程和步骤

源代码地址:https://gitee.com/jxzcode_admin/flask-project.git

参考资料:

https://blog.csdn.net/weixin_42185136/article/details/104496351?spm=1001.2014.3001.5506

https://www.jianshu.com/p/d5a46b2d2fd3

相关推荐
zhjadsf24 分钟前
Huggingface_hub源码解析 - 简介篇
python·huggingface
20岁30年经验的码农26 分钟前
Python语言基础文档
开发语言·python
清静诗意1 小时前
独立 IoT 客户端绕过 Django 生命周期导致数据库断链:诊断与修复
python·mysql·django·生命周期
不知更鸟4 小时前
Django 项目设置流程
后端·python·django
自动化代码美学5 小时前
【Python3.13】官网学习之控制流
开发语言·windows·python·学习
黄昏恋慕黎明6 小时前
spring MVC了解
java·后端·spring·mvc
G探险者8 小时前
为什么 VARCHAR(1000) 存不了 1000 个汉字? —— 详解主流数据库“字段长度”的底层差异
数据库·后端·mysql
百锦再8 小时前
第18章 高级特征
android·java·开发语言·后端·python·rust·django
Tony Bai8 小时前
Go 在 Web3 的统治力:2025 年架构与生态综述
开发语言·后端·架构·golang·web3
源码之家8 小时前
基于Python房价预测系统 数据分析 Flask框架 爬虫 随机森林回归预测模型、链家二手房 可视化大屏 大数据毕业设计(附源码)✅
大数据·爬虫·python·随机森林·数据分析·spark·flask