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

部署于PythonAnywhere的带ML模型Flask应用无响应问题求助

PythonAnywhere部署Flask目标检测应用的问题排查与支持性说明

PythonAnywhere完全支持Flask+目标检测类的项目,你遇到的超时问题主要是资源使用逻辑或推理优化不足导致的,以下是具体排查和解决方向:

1. 优化模型加载逻辑

不要在请求处理函数内加载model.pt——每次请求都加载235MB的模型会直接拖慢响应速度,触发超时。正确的做法是在Flask应用启动时一次性加载模型到内存,后续请求直接复用:

from flask import Flask
import torch

app = Flask(__name__)
# 启动阶段加载模型,仅执行一次
model = torch.hub.load('ultralytics/yolov5', 'custom', path='model.pt', map_location='cpu')

@app.route('/detect', methods=['POST'])
def detect():
    # 直接使用已加载的model处理请求
    # 你的检测逻辑代码

2. 处理单请求超时限制

PythonAnywhere的Web应用单请求最长运行时间为60秒,如果推理过程超过这个时长,会被系统强制终止,返回“Something went wrong”,且普通错误日志可能不会记录细节。可以从这几点优化:

  • 缩小输入图片尺寸:比如将图片缩放到640x640(主流目标检测模型的默认输入尺寸),避免处理大尺寸图片增加计算量。
  • 启用半精度推理:如果使用PyTorch模型,可通过model.half()启用半精度计算,降低CPU负载。
  • 切换轻量化模型:如果当前模型是大尺寸版本(如YOLOv5l/v5x),换成v5s这类小模型,推理速度会大幅提升。

3. 规范临时文件处理

确保临时文件保存到PythonAnywhere允许的路径(比如/tmp目录,平台对该目录有读写权限),避免因路径权限问题导致卡顿:

from werkzeug.utils import secure_filename
import os
from flask import request

@app.route('/detect', methods=['POST'])
def detect():
    if 'image' not in request.files:
        return "No image provided", 400
    file = request.files['image']
    filename = secure_filename(file.filename)
    temp_path = os.path.join('/tmp', filename)
    file.save(temp_path)
    # 加载临时图片进行检测
    # ...
    # 检测完成后清理临时文件,避免占用磁盘空间
    os.remove(temp_path)

4. 查看更详细的日志信息

除了Web应用的错误日志,去PythonAnywhere的「Web」标签页下查看Server log(服务器日志),这里会记录请求被终止的具体原因(比如超时、内存不足)。如果是内存问题,可考虑升级内存配额,或在加载模型时指定map_location='cpu'减少不必要的内存占用。


内容的提问来源于stack exchange,提问作者Lost Soul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:55:31