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的上下文内。
相关推荐
Kiri霧4 分钟前
Range循环和切片
前端·后端·学习·golang
过期动态6 分钟前
JDBC高级篇:优化、封装与事务全流程指南
android·java·开发语言·数据库·python·mysql
WizLC7 分钟前
【Java】各种IO流知识详解
java·开发语言·后端·spring·intellij idea
Victor35614 分钟前
Netty(19)Netty的性能优化手段有哪些?
后端
爬山算法20 分钟前
Netty(15)Netty的线程模型是什么?它有哪些线程池类型?
java·后端
一世琉璃白_Y31 分钟前
pg配置国内数据源安装
linux·python·postgresql·centos
liwulin050637 分钟前
【PYTHON】COCO数据集中的物品ID
开发语言·python
小鸡吃米…37 分钟前
Python - XML 处理
xml·开发语言·python·开源
我赵帅的飞起43 分钟前
python国密SM4加解密
python·sm4加解密·国密sm4加解密
白宇横流学长1 小时前
基于SpringBoot实现的冬奥会科普平台设计与实现【源码+文档】
java·spring boot·后端