【发布时间】:2012-05-22 01:49:36
【问题描述】:
在预分配大量内存(例如 numpy 数组)后使用系统调用时存在性能问题。这个问题随着内存量的增加而增加。
test.py:
import os
import sys
import time
import numpy
start = time.clock()
test = int(sys.argv[1])
a = numpy.zeros((test,500,500))
for i in range(test) :
os.system("echo true > /dev/null")
elapsed = (time.clock() - start)
print(elapsed)
每次迭代时间急剧增加:
edouard@thorin:~/now3/code$ python test.py 100
0.64
edouard@thorin:~/now3/code$ python test.py 200
2.09
edouard@thorin:~/now3/code$ python test.py 400
14.26
这应该与虚拟内存无关。 这是一个已知问题吗?
【问题讨论】:
-
这可能部分与您可用的连续内存量有关。即使你有很多内存,分配一个大的连续块也可能比你预期的要花费更多的时间。如果您连续多次运行
python test.py 1000测试,您是否发现所需时间有很大差异? -
@JoeKington 对我来说,分配只需要大约 35 秒中的 1 秒来运行测试。
-
经过进一步调查,为了清楚起见,已对问题和代码进行了修改。需要的时间有一个小的变化。是的,分配时间非常快。
-
请提供您的 Python 版本和操作系统的详细信息。
-
python Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2
标签: python performance memory numpy