如果请求中止,则停止处理Flask路线
我有一个flask
REST端点,该端点执行一些CPU密集型图像处理,并且需要几秒钟的时间才能返回。通常,此端点被调用,然后被客户端中止。在这些情况下,我想取消处理。我该如何在烧瓶中这样做?
在node.js中,我将执行以下操作:
req.on('close', function(){ //some handler
});
我期望flask具有类似的东西,或者是同步方法(request.isClosed()),我可以在处理期间在某些点进行检查,如果关闭,则返回该方法,但是找不到。
我考虑过要发送一些东西来测试连接是否仍然打开,并在连接失败时捕获异常,但是Flask似乎会缓冲所有输出,因此在处理完成并尝试返回结果之前不会引发异常:
主机中的软件中止了已建立的连接
如果客户端中止请求,如何中途取消处理?
回答:
有一个潜在的…
hacky解决方案来解决您的问题。Flask能够通过生成器将内容流回给用户。hacky部分将流空白数据,以检查连接是否仍然打开,然后在您的内容完成后,生成器可以生成实际图像。您的生成器可以检查处理是否完成并返回,None
或者如果处理未完成则进行""
任何检查。
from flask import Response@app.route('/image')
def generate_large_image():
def generate():
while True:
if not processing_finished():
yield ""
else:
yield get_image()
return Response(generate(), mimetype='image/jpeg')
我不知道如果客户端关闭连接会遇到什么异常,但我敢打赌 error: [Errno 32] Broken pipe
以上是 如果请求中止,则停止处理Flask路线 的全部内容, 来源链接: utcz.com/qa/418108.html