wya*_*byn 5 python timestamp http flask
我有一个普通的 Flask 应用程序,只有一个线程来处理请求。有许多请求同时到达。他们排队等待处理。如何获得每个请求的队列等待时间?
from flask import Flask, g
import time
app = Flask(__name__)
@app.before_request()
def before_request():
g.start = time.time()
g.end = None
@app.teardown_request
def teardown_request(exc):
g.end = time.time()
print g.end - g.start
@app.route('/', methods=['POST'])
def serve_run():
pass
if __name__ == '__main__':
app.debug = True
app.run()
Run Code Online (Sandbox Code Playgroud)
在单线程模式下使用 Flask 的调试服务器(这是您的示例代码所使用的)是无法做到这一点的。这是因为默认情况下,Flask 调试服务器仅继承自 Python 的标准HTTPServer单线程标准。(并且底层调用select.select()不会返回时间戳。)
我只有一个线程来处理请求。
好的,但是生成多个线程就足够了,但阻止它们并行执行“真正的”工作吗?如果是这样,您可以尝试app.run(..., threaded=True)允许请求立即启动(在它们自己的线程中)。之后start记录时间戳threading.Lock,使用 a强制请求串行执行。
另一种选择是使用不同的 WSGI 服务器(不是 Flask 调试服务器)。我怀疑有一种方法可以使用 GUnicorn 来实现您想要的效果,并在单个线程中配置异步工作线程。
| 归档时间: |
|
| 查看次数: |
2847 次 |
| 最近记录: |