希望有人能帮我解决这个问题。
我在docker容器中运行了一个非常简单的Flask服务器,它在每次调用/api/feed_image
端点时都接受一个新帧。通过该端点的图像然后从/video_feed
流到index.html
应用程序最初的工作方式与预期的一样,但是,当我看到使用docker stats
消耗资源时,内存使用率缓慢攀升,直到整个系统崩溃。
有人知道我可能错过了什么或有什么建议吗
谢谢
import os
import sys
from azure.iot.device.aio import IoTHubModuleClient
from flask import Response
from flask import request
from flask import Flask
from flask import render_template
import datetime
import time
import numpy as np
import cv2
import queue
frameQueue = queue.Queue()
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")
@app.route("/video_feed")
def video_feed():
print(len(frameQueue))
return Response(generate(), mimetype="multipart/x-mixed-replace; boundary=frame")
@app.route("/api/feed_image", methods=['POST'])
def read_image():
r = request
nparr = np.fromstring(r.data, np.uint8)
frameQueue.put(cv2.imdecode(nparr, cv2.IMREAD_COLOR))
def generate():
global frameQueue
while True:
outputFrame = frameQueue.get()
if outputFrame is None:
continue
(flag, encodedImage) = cv2.imencode(".jpg", outputFrame)
if not flag:
continue
yield(b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + bytearray(encodedImage) + b'\r\n')
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5001', debug=True, threaded=True, use_reloader=False)
过了很长时间,我解决了自己的问题。 事实证明,因为我在
read_image()
结尾没有返回响应对象,Flask生成了一个异常,该异常一定是在后台缓存的:添加return语句解决了这个问题
也许有人会解释为什么会发生这种情况? 不管怎样,我希望这能帮助别人
相关问题 更多 >
编程相关推荐