gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:34:29 29 4
gpt4 key购买 nike

情况如下:

我有一个应用程序,它使用 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 是否都会执行?
  • 这种情况是否可能造成任何内存泄漏?
  • 是否有可能知道用户在某个时候关闭了浏览器? (包括当我尝试返回响应时:是否有可能知道响应未送达?)
  • 这个问题的答案是否取决于我使用的服务器? ( Tornado 、uWSGI……)

非常感谢您的回答。

最佳答案

  1. Will both long_task and short_task will be executed anyway?

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

  1. Is it possible that this situation creates any memory leakage?

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

  1. Is it possible to know that the user closed the browser at some point? (including when I try to return the response: would it be possible to know that the response wasn't delivered?) Does the answer of this question depends on what server am I using? (Tornado, uWSGI...)

简单的答案 - 不。但它可以通过某种黑客攻击来完成,在执行 long_task 时流式传输空响应并捕获异常,如果客户端关闭连接,该异常将被断言。

您可以在这里阅读:Stop processing Flask route if request aborted

关于python - Flask:当用户在执行一个长进程时关闭浏览器时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311299/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com