- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用 python 2.7.7 运行了以下命令:
import gc
import memory_profiler
print memory_profiler.memory_usage()[0]
x = [i for i in range(10000000)]
print memory_profiler.memory_usage()[0]
x = None
print memory_profiler.memory_usage()[0]
gc.collect()
print memory_profiler.memory_usage()[0]
它产生了以下输出:
11.36328125
321.9140625
245.6171875
245.6171875
这是怎么回事?内存使用量减少约 25% 的原因是什么?
最佳答案
这post应该给你一个很好的主意。基本上,python 将有一些空闲列表内存,当它们用完时,内存就会成为开销。例如:
import gc
import memory_profiler
print memory_profiler.memory_usage()[0]
x = [i for i in range(10000)]
print memory_profiler.memory_usage()[0]
x = None
print memory_profiler.memory_usage()[0]
gc.collect()
print memory_profiler.memory_usage()[0]
输出:
7.28515625
7.796875
7.796875
7.796875
但是当我用一个非常大的列表运行你的代码时,结果是不同的,代码:
import gc
import memory_profiler
print memory_profiler.memory_usage()[0]
x = [i for i in range(10000000)]
print memory_profiler.memory_usage()[0]
x = None
print memory_profiler.memory_usage()[0]
gc.collect()
print memory_profiler.memory_usage()[0]
输出:
7.3515625
387.31640625
311.30859375
94.7890625
所以如果我说的一切都是真的,如果它真的在吃完空闲的 python 列表内存后造成开销;让我们尝试释放类似于 post 的内存:
import gc
import memory_profiler
def release_list(a):
del a[:]
del a
print memory_profiler.memory_usage()[0]
x = [i for i in range(10000000)]
release_list(x)
print memory_profiler.memory_usage()[0]
x = None
print memory_profiler.memory_usage()[0]
gc.collect()
print memory_profiler.memory_usage()[0]
输出:
7.34765625
318.3359375
318.3359375
96.3359375
显然,当您分配 x = None 时,它释放了您使用非常大的列表启动的额外负担。通常在现实世界中,python 空闲列表内存应该可以满足用户的要求,并且不会有任何区别。
其他资源:
关于python 实验 gc 和 memory_profiler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37075939/
我最近开始使用 here 中的 python 内存分析器。作为测试运行,我尝试分析 here 中的玩具代码。按照其中的说明进行操作。我对我看到的输出有一些天真的问题。 import time @pro
我正在尝试使用 memory_profiler ,但我遇到了一个在 example.py 中被隔离的问题: #! /usr/bin/env python import argparse def par
我正在编写一个简单的应用程序,它将一个大的文本文件拆分成多个较小的文件,我已经编写了它的两个版本,一个使用列表,一个使用生成器。我使用 memory_profiler 模块分析了两个版本,它清楚地显示
我正在使用 memory_profiler 分析我的代码 from memory_profiler import profile @profile def whatever(): ....
请原谅我这个幼稚的问题。我正在尝试监视我的 python 代码的内存使用情况,并且遇到了有前途的 memory_profiler包裹。我对解释@profile 装饰器生成的输出有疑问。 这是我通过运行
我用 python 2.7.7 运行了以下命令: import gc import memory_profiler print memory_profiler.memory_usage()[0] x
我使用 pip install -U memory_profiler 通过 pip 安装 memory_profiler 并尝试使用 mprof 使用:mprof 运行mprof 图 但是得到如下错误
我有一个使用 docopt 的 Python 程序,并且似乎可以很好地解析命令行参数。但是,当我尝试在调用中包含内存分析器(使用 -m 内存分析器)时,docopt 无法解析命令并打印使用语句。这是一
更新:在 memory_profiler 0.53 及更高版本中,@profile 可以根据需要装饰任意数量的路由。早期版本只允许装饰一条路线。以下问题仅适用于版本 = 0.53 不会有这个问题。参见
我对特定 python 脚本的内存使用情况感到非常困惑。尽管 advice,我想我真的不知道如何分析使用情况来自几个 SO 问题/Answers . 我的问题是:memory_profiler 和 g
我想分析类方法的时间和内存使用情况。我没有为此找到开箱即用的解决方案(有这样的模块吗?),我决定使用 timeit 进行时间分析,并使用 memory_profiler 中的 memory_usage
我无法理解memory_profiler 的输出。基本上,它看起来像这样: Filename: tspviz.py Line # Mem usage Increment Line Co
我有一个使用 Python multiprocessing 生成多个 worker 的实用程序模块,我希望能够通过出色的 memory_profiler 跟踪它们的内存使用情况实用程序,它可以做我想做
我是一名优秀的程序员,十分优秀!