如果请求中止,则停止处理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

回到顶部