情况如下:
我有一个应用程序,它使用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_task
和short_task
都会被执行吗? 非常感谢您的回答。
答案 0 :(得分:2)
- 无论如何都会执行long_task和short_task吗?
醇>
是的,他们会的。 Flask不知道客户端是否关闭了连接。
- 这种情况是否可能造成内存泄漏?
醇>
是的,但这只取决于你在long_task和short_task中的代码。即使没有连接抛出,也可能发生内存泄漏。您可以写入记录请求之前和之后分配的内存之间的差异。
- 是否可以知道用户在某个时候关闭了浏览器? (包括当我试图回复时:是不是 可能知道答案未送达?)答案是否正确? 这个问题取决于我使用的服务器? (龙卷风, uWSGI ...)
醇>
简单回答 - 没有。但是,当执行long_task并捕获异常时,可以使用某种类型的黑客攻击来执行流式空响应,如果客户端关闭连接则会断言。