gpt4 book ai didi

python - 使用 Werkzeug/Flask 时如何测量 Web 请求的内存使用情况?

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:22 27 4
gpt4 key购买 nike

有没有办法测量 Flask/Werkzeug 应用程序中任意网络请求分配的内存量?任意,我的意思是我更喜欢一种技术,它可以让我在足够高的水平上检测代码,而不必更改它来测试不同路由的内存使用情况。如果那不可能,但仍然可以通过用少量代码包装单个请求来做到这一点,那就这样吧。

在我不久前编写的一个 PHP 应用程序中,我通过在请求的开始和结束时调用 memory_get_peak_usage() 函数并取差来完成此操作。

在 Python/Flask/Werkzeug 中有模拟吗?如果重要,请使用 Python 2.7.9。

最佳答案

首先,应该了解 PHP 和 Python 请求处理之间的主要区别。粗略地说,每个 PHP worker 只接受一个请求,处理它然后死掉(或重新初始化解释器)。 PHP 是直接为它设计的,它本质上是请求处理语言。因此,测量每个请求的内存使用量非常简单。 Request 的峰值内存使用量等于 worker 的峰值内存使用量。这是一种语言功能。

同时,Python通常使用另一种方式来处理请求。有两种主要模型——同步和异步请求处理。但是,在衡量每个请求的内存使用情况时,它们都有同样的困难。原因是一个 Python worker 在他的一生中处理了大量的请求(并发或顺序)。因此,很难准确获取请求的内存使用情况。

但是,可以调整底层框架和应用程序代码来完成收集内存使用任务。一种可能的解决方案是使用某种 events .例如,可以在以下位置引发抽象的 mem_usage 事件:请求之前、 View 函数的开头、 View 函数的结尾、业务逻辑中的一些重要位置等等。然后它应该存在此类事件的订阅者,做接下来的事情:

import resource
mem_usage = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

此订阅者必须积累此类使用数据,并在 app_request_teardown/after_request 上将其连同有关当前 request.endpoint 或路由或其他信息的信息发送到指标收集系统。

此外,using a memory profiler是个好主意,但通常不适用于生产用途。

进一步阅读请求处理模型:

关于python - 使用 Werkzeug/Flask 时如何测量 Web 请求的内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637899/

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