【发布时间】:2014-01-29 04:04:35
【问题描述】:
我在内存受限的环境中工作,并使用带有 tarfile 库 (http://docs.python.org/2/library/tarfile.html) 的 Python 脚本来持续备份日志文件。
随着日志文件数量的增加(~74 000),我注意到系统现在运行时有效地终止了这个备份进程。我注意到它消耗了大量内存(在被操作系统杀死之前大约 192mb)。
我可以将日志文件制作成 gzip tar 存档 ($ tar -czf),不会出现问题或内存占用过高。
代码:
import tarfile
t = tarfile.open('asdf.tar.gz', 'w:gz')
t.add('asdf')
t.close()
目录“asdf”包含 74407 个文件名长度为 73 的文件。 当你有大量文件时,不建议使用 Python 的 tarfile 吗?
我正在运行 Ubuntu 12.04.3 LTS 和 Python 2.7.3(tarfile 版本似乎是“$Revision: 85213 $”)。
【问题讨论】:
-
我们不知道你是如何使用它的。
-
AFAIK
tarfile是一个纯 python 模块,因此它可能比tar命令消耗更多的内存也就不足为奇了。 -
你能告诉我们你的代码吗?发生这种情况的原因可能有很多,根据文档,当以流模式打开时,TarFile 类以 ~(20 * 512) 字节的块处理其数据。您是否打开了随机访问? (docs.python.org/2/library/tarfile.html)。
-
在您的情况下,使用二进制
tar而不是 Python tar 模块,您实际上可能会更好。 -
@IgnacioVazquez-Abrams 我用一些代码更新了这个问题,但它实际上只是基本的标准代码。添加了一些文件数量和文件名长度的规范。如果这很重要......