Flask-flask系统运行后台轮询线程

对于有些flask系统,后台需要启动轮询线程,执行特定的任务,以下是一个简单的例子。

globals/daemon.py

python 复制代码
import threading
from app.executor.ops_service import find_and_run_ops_task_todo_in_redis


def context_run_func(app, func):
    with app.app_context():
        func(app)

def daemon_start(app):
    thread1 =threading.Thread(target=context_run_func, args=(app, find_and_run_ops_task_todo_in_redis))
    thread1.setDaemon(True)
    thread1.start()

init.py

python 复制代码
from flask import Flask
from .globals.daemon import daemon_start

flask_app = Flask(__name__)

def create_app():
    CORS(flask_app, supports_credentials=True)
    with flask_app.app_context():
        config_init(flask_app, sys_args)  # 初始化配置
        log_init(flask_app)               # 初始化日志记录
        register_blueprint(flask_app)     # 注册蓝图
        register_executor(flask_app)      # 注册异步程序执行器
        register_scheduler(flask_app)     # 注册计划任务
        daemon_start(flask_app)

run.py

python 复制代码
myapp = create_app(sys_args)

if __name__ == '__main__':
    myapp.run()

注意

  1. 不能以flask-executor启动异步执行的方式启动后台线程,会运行报错:executor需要request上下文;
  2. threading内需要传递app的上下文,否则会报错:未在app的上下文内。
相关推荐
To_OC6 小时前
Next.js + Redis 构建笔记系统:Redis Hash 实战与性能优化
redis·后端·next.js
安_6 小时前
如何构建和使用向量索引?HNSW 和 IVF 有什么区别?
python·ai
counting money7 小时前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
坚持学习前端日记8 小时前
Python SQLAlchemy ORM 从0到1精通实战手册(基础到复杂高阶)
数据库·python·oracle
北斗落凡尘8 小时前
LangGraph 入门实战(11)--输出模式
后端·python·langchain
雪碧聊技术9 小时前
安装Python(保姆级教程)
python·版本更新·python下载
++==9 小时前
JSON和Python的 四种核心容器
python·json
demo007x9 小时前
Hermes-Agent 技术架构
前端·后端·agent
__zRainy__11 小时前
Node系列 · Node基础:net 模块
后端·node.js