【发布时间】:2018-09-07 13:38:29
【问题描述】:
我正在尝试从一个大型 tarball 文件创建文件名列表,我想了解为什么在我的示例中内存使用量仍然相同?是因为f.write() 在文件实际关闭之前仍在内存中保存/缓冲所有对象吗?有什么办法可以改善吗?
# touch file{1..100000}.txt
# tar cf test.tar file*
生成器
# python test.py
Memory (Before): 40.918MB
Memory (After): 117.066MB
It took 12.636950492858887 seconds.
列表:
# python test.py
Memory (Before): 40.918MB
Memory (After): 117.832MB
It took 12.049121856689453 seconds.
test.py
#!/usr/bin/python3
import memory_profiler
import tarfile
import time
def files_generator(tar):
entry = tar.next()
while entry:
yield entry.name
entry = tar.next()
def files_list(tar):
return tar.getnames()
if __name__ == '__main__':
print(f'Memory (Before): {memory_profiler.memory_usage()[0]:.3f}MB')
start = time.time()
tar = tarfile.open('test.tar')
with open('output_g.txt', 'w') as f:
for i in files_generator(tar):
#for i in files_list(tar):
f.write(i + '\n')
end = time.time()
print(f'Memory (After): {memory_profiler.memory_usage()[0]:.3f}MB')
print(f'It took {end-start} seconds.')
【问题讨论】:
-
你试过刷盘吗?
标签: python list memory-management generator