use*_*515 5 python iterator multiprocessing
考虑非常简单的代码:
#!/usr/bin/python
from multiprocessing import Pool
import random
def f(x):
return x*x
def sampleiter(n):
num = 0
while num < n:
rand = random.random()
yield rand
num += 1
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
for item in pool.imap_unordered(f, sampleiter(100000000000000), 20):
print item
pool.close
Run Code Online (Sandbox Code Playgroud)
在终端中运行时,Python泄漏了内存.
可能有什么不对?
我在这里看到的唯一导致内存泄漏的变量是您的 print 语句。当我替换print item为时pass,内存保持较低且恒定。我不确定打印时到底发生了什么,但显然它会堆积一些东西而不是释放。另外,当我将块大小降低到 1 时,内存增加得更慢(显然),但也需要更长的时间。所以它确实会增加内存使用量。
发现这是由于终端的历史缓冲区(而不是 python 进程本身)而导致内存使用量增加的具体参考:Memory Leak when running python in Mac OS Terminal
| 归档时间: |
|
| 查看次数: |
2303 次 |
| 最近记录: |