python - 如何在 flask 中获取请求的到达时间戳

标签 python http flask timestamp

我有一个普通的 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()

最佳答案

在单线程模式下使用 Flask 的调试服务器无法做到这一点(您的示例代码使用的是这种模式)。这是因为默认情况下,Flask 调试服务器仅继承自 Python 的标准 HTTPServer,它是单线程的。 (并且对 select.select() 的底层调用不返回时间戳。)

I just have one thread to process requests.

好的,但是产生多个线程就足够了吗,但阻止它们并行执行“实际”工作?如果是这样,您可以尝试 app.run(..., threaded=True),以允许请求立即启动(在它们自己的线程中)。在记录了 start 时间戳后,使用 threading.Lock 强制请求串行执行。

另一种选择是使用不同的 WSGI 服务器(不是 Flask 调试服务器)。我怀疑有一种方法可以使用 GUnicorn 实现您想要的,在单个线程中配置异步 worker 。

关于python - 如何在 flask 中获取请求的到达时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40402804/

相关文章:

python - 尽管 rasterized=True,为什么 matplotlib 图形文件大小很大?

python 3; Websockets 服务器和 HTTP 服务器 - run_forever 和 serve_forever

python - 如何捕获 ctrl-c 以杀死 Flask python 脚本

python - 使用 Python Flask 在我的 html 中显示 .txt 文件

Python - 在 subprocess.call 语法中更改工作目录

python - 如何使用 mapPartitions 在 RDD 的分区上运行 python 用户定义函数?

Python - 在内存中生成 csv 文件,然后将其数据编码为 base64?

python - 给定一个日期范围,如何计算部分或全部在该范围内的周末数?

ios - ASIHTTPRequest 下载 : Should I request a large file or many small size files?

python - 实现非阻塞远程日志处理程序