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

Flask生产环境启用allow_unsafe_werkzeug=True的风险及树莓派摄像头问题

问题解答

关于生产环境启用allow_unsafe_werkzeug=True的风险

直接给结论:绝对不建议在生产环境这么做。Werkzeug自带的服务器是纯开发调试用的,核心硬伤包括:

  • 性能极差:只能处理极低并发,用户量稍大就会直接卡死崩溃,完全扛不住生产场景的流量
  • 安全防护缺失:没有内置的限流、防扫描等基础安全机制,很容易成为攻击目标
  • 稳定性不足:长时间运行易出现内存泄漏、进程无响应的情况,且没有自动恢复能力
    哪怕你加了allow_unsafe_werkzeug=True,也只是关掉了警告提示,本质还是在用开发服务器,生产环境跑这个纯粹是给自己埋隐患。

解决gunicorn多实例导致摄像头冲突的办法

你的推测完全正确,gunicorn默认会启动多个worker进程,每个进程都会初始化摄像头,自然会出现资源抢占的问题。解决办法很直接:

  • 启动gunicorn时强制指定1个worker进程,命令改成这样:
    gunicorn --workers=1 --bind 0.0.0.0:5000 your_flask_app:app
    
  • 同时确保摄像头对象是全局初始化的,不要在路由函数里每次请求都创建实例。比如在Flask应用启动时就初始化摄像头,路由直接复用这个全局对象:
    from flask import Flask, Response
    import cv2
    
    app = Flask(__name__)
    # 全局初始化摄像头,仅执行一次
    camera = cv2.VideoCapture(0)
    
    def generate_frames():
        while True:
            success, frame = camera.read()
            if not success:
                break
            ret, buffer = cv2.imencode('.jpg', frame)
            frame = buffer.tobytes()
            yield (b'--frame\r\n'
                   b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
    
    @app.route('/video_feed')
    def video_feed():
        return Response(generate_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')
    
    if __name__ == '__main__':
        app.run()
    

这样gunicorn只会运行一个进程,摄像头只会被初始化一次,就不会出现资源冲突的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:57:37