Python Flask Web 应用程序在多次调用时挂起
Python Flask web application hanging when called multiple times
我使用 Flask 创建了一个 Web 应用程序,以便通过 HTTP 请求触发检测例程。
基本上,每次向端点发送 GET 请求时 URL,我都希望执行一个函数。
我使用的代码是:
web_app = Flask(__name__)
@web_app.route('/test/v1.0/run', methods=['GET'])
def main():
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
while(True):
ret, frame = cap.read()
***performing operations on each frame and running ML models on them***
return ('', 204)
if __name__ == '__main__':
web_app.run(debug=True)
第一次一切正常,如果我使用:
curl -i http://localhost:5000/test/v1.0/run
执行函数main(),最后将结果上传到在线数据库。
此后,程序继续监听 URL。如果我发送另一个 GET 请求,main() 会再次执行,但它会在 while 循环的第一次迭代后挂起。
我简单地 运行 多次尝试将相同的代码放在 for 循环中:
for i in range(10):
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
while(True):
ret, frame = cap.read()
***performing operations on each frame and running ML models on them***
它工作没有任何问题,所以挂起不应该依赖于我在代码中所做的任何事情。
问题应该是我是用flask来触发函数导致的,但在这种情况下我不明白为什么main()在启动后会挂起。一般来说,我对 Flask 和 Web 应用程序还很陌生,所以我可能在这里遗漏了一些非常简单的东西。
问题是我还使用
显示从相机收集的帧
cv2.imshow("window", frame)
并且,即使在程序结束时我通过以下方式关闭所有内容:
cap.release()
cv2.destroyAllWindows()
有些事情仍然悬而未决,它让流程在下一次迭代中停滞不前。
我通过删除 cv2.imshow 来解决......我真的不需要可视化流,所以我可以接受它。
不过,主要是出于好奇,我将尝试弄清楚即使在可视化视频帧时如何使其工作。
我使用 Flask 创建了一个 Web 应用程序,以便通过 HTTP 请求触发检测例程。
基本上,每次向端点发送 GET 请求时 URL,我都希望执行一个函数。
我使用的代码是:
web_app = Flask(__name__)
@web_app.route('/test/v1.0/run', methods=['GET'])
def main():
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
while(True):
ret, frame = cap.read()
***performing operations on each frame and running ML models on them***
return ('', 204)
if __name__ == '__main__':
web_app.run(debug=True)
第一次一切正常,如果我使用:
curl -i http://localhost:5000/test/v1.0/run
执行函数main(),最后将结果上传到在线数据库。
此后,程序继续监听 URL。如果我发送另一个 GET 请求,main() 会再次执行,但它会在 while 循环的第一次迭代后挂起。
我简单地 运行 多次尝试将相同的代码放在 for 循环中:
for i in range(10):
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
while(True):
ret, frame = cap.read()
***performing operations on each frame and running ML models on them***
它工作没有任何问题,所以挂起不应该依赖于我在代码中所做的任何事情。
问题应该是我是用flask来触发函数导致的,但在这种情况下我不明白为什么main()在启动后会挂起。一般来说,我对 Flask 和 Web 应用程序还很陌生,所以我可能在这里遗漏了一些非常简单的东西。
问题是我还使用
显示从相机收集的帧cv2.imshow("window", frame)
并且,即使在程序结束时我通过以下方式关闭所有内容:
cap.release()
cv2.destroyAllWindows()
有些事情仍然悬而未决,它让流程在下一次迭代中停滞不前。 我通过删除 cv2.imshow 来解决......我真的不需要可视化流,所以我可以接受它。 不过,主要是出于好奇,我将尝试弄清楚即使在可视化视频帧时如何使其工作。