gpt4 book ai didi

python - 如何确定在 Tornado/Flask/Python 上上传 HTTP 请求需要多长时间?

转载 作者:行者123 更新时间:2023-12-03 17:02:26 25 4
gpt4 key购买 nike

注意:如果没有 Flask,这可能是不可行的。/WSGI/Tornado修改(这是 Not Acceptable )。 请看“为什么不直接修改代码?”下面的部分。

我需要我的Flask/WSGI/Tornado服务器确定 HTTP 客户端将其数据上传到大型 POST 所需的时间/PUT .所有Flask/Tornado我看到的回调只调用一次整个 Content-Length已上传。

我需要这些信息,以便我可以更好地服务缓慢的请求和/或将快速上传的请求优先于较慢的请求等。

但是,我只是在 Flask 中没有看到任何可用的回调。 , WerkzeugTornado ,也不是 Flask.request 上的成员反对获取此信息。

关于lord63-j给出的答案 : 虽然真的很酷,但这不是我们所需要的。到时 app.route()处理程序被调用,整个 POST/PUT数据已经上传。

为什么不直接修改代码?

Spelunking 显示修改代码的最佳位置是 HTTP1Connection.start_serving , 添加 start timeWSGI/Flask然后就可以使用了。遗憾的是,代表的 data_received future 仅将 body 数据作为参数,这意味着 start time传递时数据将丢失。

或者,Tornado_RequestDispatcher.headers_received (开始)和execute (完整的)函数可以修改为存储每个阶段的当前时间,但是您仍然会遇到将时间传递给WSGI的问题/Flask . (headers_received 是可以接受的,因为标题通常比正文小得多)

如您所见,这很快就变成了一个兔子洞。

最佳答案

不确定这是否是个好主意,但您可以尝试 after_this_request .

一个简单的例子:

import time

from flask import Flask, after_this_request

app = Flask(__name__)

@app.route('/')
def index():
before = time.time()
@after_this_request
def cal_time(response):
print(time.time() - before)
return response
return 'Hello, world.'

if __name__ == '__main__':
app.run(debug=True)

那么您应该会在控制台中看到打印的时间。
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
0.000116109848022
127.0.0.1 - - [17/Nov/2015 20:41:51] "GET / HTTP/1.1" 200 -

您可以尝试一下,看看它是否适合您。我在 flask 文档中尝试了上传示例,看起来工作正常。

关于python - 如何确定在 Tornado/Flask/Python 上上传 HTTP 请求需要多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33748143/

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