You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask多线程执行异常问题:页面加载耗时过长

问题分析与修复方案

核心问题

你的多线程未生效的根本原因是错误地直接调用了目标函数,而非将函数对象传递给线程。threading.Thread(target=run(uid))这行代码会先执行耗时20秒的run(uid)请求,等它完成后才会创建并启动线程,导致页面依然需要等待20秒才响应。

修复后的完整代码

from flask import Flask
import threading
import requests  # 补全缺失的模块导入

app = Flask(__name__, template_folder='')

def run(uid):
    requests.get(f"http://192.168.1.9:5001/run?old={uid}")

@app.route('/get')
def get():
    uid = "Player1"
    # 正确传递函数对象与参数
    threading.Thread(target=run, args=(uid,)).start()
    return f"{uid} banned"

app.run(host='0.0.0.0', port=80)

关键修改点

  • 修正线程创建逻辑:将target=run(uid)改为target=run, args=(uid,),避免立即执行run函数,而是把函数作为线程的执行目标,通过args元组传递参数(单个参数需保留逗号以确保是元组格式)。
  • 补全必要导入:添加threading和requests模块的导入,否则代码会抛出未定义错误。
  • 修复路由参数不匹配:原路由/get未定义URL参数,因此视图函数get不能声明uid参数,否则会触发Flask路由匹配错误。
  • 移除冗余代码:删除未被使用的NewThreadedTask类定义,精简代码结构。

额外优化建议

如果你的Flask应用需要处理大量此类异步任务,推荐使用更专业的异步方案:比如Flask 2.0+支持的async/await异步视图,或是结合Celery与消息队列(Redis/RabbitMQ)实现分布式任务处理,多线程在高并发场景下存在资源调度的局限性。

内容的提问来源于stack exchange,提问作者big boss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:17:07