flask开发定时任务--操作数据库

news/2024/7/3 4:22:48

背景:需要定时对图片进行目标检测,图片存储在数据库中

其实一开始,这个定时任务已经写好了,但是当时没有这些图片,就拿本地的一些图片去模拟。

当我想当然去操作数据库获取最新图片路径出现了如下问题

执行时报错:RuntimeError: No application found. Either work inside a view function or push an application context

我理解问题原因是操作数据库是需要db,但是此时后台运行的定时任务是找不到app的。
解决办法
1.安装

pip install apscheduler

2.导入

from flask_apscheduler import APScheduler

3.使用

scheduler = APScheduler()
Bee = Yolo7BeeImg()
#设置定时任务--半小时执行一次yolo
@scheduler.task("interval",id="yolo",minutes=3)
def hello():
    print('定时器触发器')
    #查询最新的图片
    sql = '''
            select path,MAX(upload_time),fxid from images
            GROUP BY fxid
         '''
    # 提供flask上下文对象
    with scheduler.app.app_context():
        result = db.session.execute(sql)
    result = list(result)
    for stock in result:
        path = stock[0]
        pass
def create_app(dev_name):
"""
    返回一个实例化并且配置好数据的一个app
    dev_name:选择环境的参数
    :return:
    """
    app = Flask(__name__)
    config_class = config_map.get(dev_name)
    app.config.from_object(config_class)  # 从类中读取需要的信息

    db.init_app(app)  # 实例化的数据库 配置信息
        # 添加工作区
    # schedul = BackgroundScheduler()
    scheduler.init_app(app)
    #schedul.add_job(func='hello', trigger='interval', seconds=60*3, id='task')  # 三分钟后执行

    scheduler.start()
    return app

添加定时任务是有注释和add_job()两种方式,但是我发现add_job在这里并不好用。

最关键的地方就是,添加上下文信息

    # 提供flask上下文对象
    with scheduler.app.app_context():
        result = db.session.execute(sql)

http://lihuaxi.xjx100.cn/news/1572154.html

相关文章

C++ -- IO流

目录 C语言的输入与输出 CIO流 C标准IO流 C文件IO流 文件常见的打开方式如下 以二进制的形式操作文件 以文本的形式操作文件 读写结构体 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输…

RocketMQ 消息重试机制

文章目录 消息发送重试重试触发条件重试流程重试间隔重试常见问题消息流控机制流控触发条件 生产者控制消息发送重试次数gRPC 客户端remoting 客户端 消费重试重试触发条件PushConsumer 消费重试策略PushConsumer 重试间隔时间修改 PushConsumer 最大重试次数gRPC 协议端口Remo…

【C】指针进阶(上)

指针进阶 文章目录 指针进阶字符指针例子解析 指针数组概念 数组指针写法注意事项 实践&数组名VS数组名使用 数组传参和指针传参一维数组传参二维数组传参一级指针传参二级指针传参注意事项: 继上文, 指针,我们已经大致了解了以下四点: …

滨州专利申请需要的材料

国知局受理后缴纳费用 国知局一般在接到专利申请文件后的15个工作日内,下发受理通知书和缴费通知书。可通过网上银行、邮政汇款缴费或者面交。如果在提交申请后两个月内没有缴纳申请费的,该申请将视为撤回;缴费成功后,该专利申请进…

Spark计算框架

Spark计算框架 一、Spark概述二、Spark的安装部署(安装部署Spark的Cluster Manager-资源调度管理器的)1、Spark的安装模式1.1、Spark(单节点)本地安装1.2 Spark的Standalone部署模式的伪分布式安装1.3Spark的YARN部署模式1.4Spark…

Geth无法获取早期block的transaction信息

问题 自己搭的Arbitrum主网全节点,在同步的时候出现了这个日志 ..Unindexed transactions blocks1 txs1 tail7,762,405..表现:数据同步方式是full,数据肯定是存在的,但根据交易hash查不到交易,如: eth.g…

虚拟机与物理机之寄生贴贴

虚拟机 虚拟机指通过【软件模拟的】、【具有完整硬件系统功能的】、【运行在一个完全隔离环境中的】完整计算机【系统】。它是一个系统,一个挂在物理机上的系统,也就是“寄生”在别人身上的东西。可以称为“寄生兽” 物理机 物理机,是真实…

算法 出现次数超过一半的数字-(哈希+摩尔投票)

牛客网: BM51 题目: 数组中只有1个数字出现次数超过一半,找出这个数字 思路: 投票计数vote0, 遍历数组,vote为0时,num赋值为当前值, num与当前值相等时,vote增加, 否则vote减小,只有1个数字出现次数超过一半&#xf…