Flask:当用户在执行长进程时关闭浏览器会发生什么?

时间:2015-02-04 00:17:53

标签: python flask

情况如下:

我有一个应用程序,它使用Angularjs作为前端,Flask作为后端。

我的路线看起来像:

@app.route('/api/route1', methods=['POST'])
def route1():
    result = some_package.long_task()
    result2 = some_package.short_task(result)
    return jsonify(result)

long_task函数正在使用check_output执行一些bash命令,使用数据库,读取和写入文件等等。完成可能需要几个小时。

让我们说用户厌倦了等待,并在流程开始10分钟后关闭浏览器窗口。

我的问题是:

  • 无论如何,long_taskshort_task都会被执行吗?
  • 这种情况是否可能造成内存泄漏?
  • 是否可以知道用户在某个时候关闭了浏览器? (包括当我尝试返回回复时:是否可以知道回复未被送达?)
  • 这个问题的答案取决于我使用的是哪台服务器? (龙卷风,uWSGI ......)

非常感谢您的回答。

1 个答案:

答案 0 :(得分:2)

  
      
  1. 无论如何都会执行long_task和short_task吗?
  2.   

是的,他们会的。 Flask不知道客户端是否关闭了连接。

  
      
  1. 这种情况是否可能造成内存泄漏?
  2.   

是的,但这只取决于你在long_task和short_task中的代码。即使没有连接抛出,也可能发生内存泄漏。您可以写入记录请求之前和之后分配的内存之间的差异。

  
      
  1. 是否可以知道用户在某个时候关闭了浏览器? (包括当我试图回复时:是不是   可能知道答案未送达?)答案是否正确?   这个问题取决于我使用的服务器? (龙卷风,   uWSGI ...)
  2.   

简单回答 - 没有。但是,当执行long_task并捕获异常时,可以使用某种类型的黑客攻击来执行流式空响应,如果客户端关闭连接则会断言。

您可以在此处阅读:Stop processing Flask route if request aborted

相关问题