【发布时间】:2016-02-18 07:18:57
【问题描述】:
注意:如果不修改Flask/WSGI/Tornado,这可能是不可行的(这是不可接受的)。请参阅“为什么不只是修改代码?”下面的部分。
我需要让我的Flask/WSGI/Tornado 服务器确定 HTTP 客户端将其数据上传到大型 POST/PUT 需要多长时间。我看到的所有 Flask/Tornado 回调只有在整个 Content-Length 上传后才会调用。
我需要这些信息,以便更好地服务缓慢的请求和/或将快速上传的请求优先于较慢的请求等。
但是,我在Flask、Werkzeug 或Tornado 中没有看到任何可用的回调,也没有在Flask.request 对象上看到用于获取此信息的成员。
关于lord63-j给出的答案:虽然很酷,但这不是我们所需要的。在调用app.route() 处理程序时,整个POST/PUT 数据已经上传。
为什么不直接修改代码?
Spelunking 表明修改代码的最佳位置是在 HTTP1Connection.start_serving 中,添加 start time 以便 WSGI/Flask 然后可以使用。 很遗憾,代理的 data_received 未来仅将主体数据作为参数,这意味着该 start time 数据在传递时将丢失。
或者,Tornado 的_RequestDispatcher.headers_received(开始)和execute(完成)函数可以修改为存储每个阶段的当前时间,但您仍然会遇到将时间传递给@987654350 的问题@/Flask。 (headers_received 是可以接受的,因为标题通常比正文小得多)
如您所见,这很快就变成了兔子洞。
【问题讨论】:
-
发现这可能对你有帮助..flask.pocoo.org/docs/0.10/patterns/fileuploads/…
-
感谢您的链接!不幸的是,我不认为它能让我更进一步:当 Flask、Werkzeug 和 Tornado 跳起不可发音的舞蹈时,数据已经上传了……这似乎反映在链接中。但是,它确实有一些我感兴趣的其他东西。谢谢!