【发布时间】:2016-10-20 01:23:56
【问题描述】:
我不太确定这是否可能......
我有一个大型 Python 应用程序,它会增长到很大的内存大小。我希望通过import 语句跟踪流程增长,以尽量减少这种情况。
我发现的最接近的是memory_profiler 的线路分析功能。但这只会分析“顶级”import 语句的内存 - 我想要所有从属导入的细分。我还没有找到任何可以跟踪 import 语句的内存大小的分析器。
这不仅是为了优化我们自己的代码,而且因为最近的审计显示一些 PyPi 模块通过简单地在 try/except 块中删除 import 语句来支持 3rd 方框架支持。
例如,一个图书馆是这样做的:
try:
import bottle
# declare bottle support here
except:
pass
虽然我的应用程序部署在 virtualenv 中,但还有其他几个同级服务是部署的一部分并在同一个 virtualenv 中运行......其中一个使用 bottle。
这个“模式”在我使用的少数库中使用,不需要/不需要的模块的开销在这个应用程序的内存印记中相当多(基于手动隔离和测量它们)。我想弄清楚优先修补哪些库以及可以安全忽略哪些库。
【问题讨论】:
-
使用
sys.getsizeof怎么样?例如。import pandas; print(getsizeof(pandas)) -
这不适用于模块。
pympler有一个asizeof功能,但似乎可以工作。不过,我最终覆盖了 import 语句,因为这给了我一个导入的顺序(这使得追踪起来更容易一些)。