我使用 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()在启动后会挂起。一般来说,我对烧瓶和 Web 应用程序很陌生,所以我可能在这里遗漏了一些非常简单的东西。