flask API的端点之一向实时流发出了较长的请求。这是代码示例:
@app.route('/stream')
def live_stream(sensor_id):
stream = requests.get('stream_url', stream=True)
return Response(stream_with_context(stream.iter_content(chunk_size=2048)),
content_type=stream.headers['content-type'])
此路线运行正常,流进行顺利。但是,当我尝试向其他路由发出请求时,服务器似乎卡在了此端点。
我正在使用gevent WSGI服务器:
http_server = WSGIServer(('0.0.0.0', 5000), app).serve_forever()
而且我正在从Flask路由已返回的模板发出请求。
我如何向API发出并行请求而不会陷入困境?
我从未使用过gevent,但如果我理解正确,它会有一个单线程事件循环(如asyncio)。但是我的理解可能是错误的。
看看这个答案https://stackoverflow.com/a/19153826/
[如果您的一段python代码需要很长时间才能运行(几秒钟)并且不会导致切换greenlets,则所有其他greenlets / gevent作业都会“饿死”并且没有计算时间,并且看起来像您的应用程序“挂起”。
我建议执行以下操作之一:
requests
的网络客户端