首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python并行追加到tarfile

Python并行追加到tarfile
EN

Stack Overflow用户
提问于 2013-10-15 18:15:26
回答 1查看 1.7K关注 0票数 0
代码语言:javascript
复制
import tarfile
from cStringIO import StringIO
from io import BytesIO as BIO

unique_keys = ['1:bigstringhere...:5'] * 5000
file_out = BytesIO()
tar = tarfile.open(mode='w:bz2', fileobj=file_out)
for k in unique_keys:
    id, mydata, s_index= k.split(':')
    inner_fname = '%s_%s.data' % (id, s_index)
    info = tarfile.TarInfo(inner_fname)
    info.size = len(mydata)
    tar.addfile(info, StringIO(mydata))
tar.close()

我想做上面的循环,以便并行地添加到tarfile (tar)中,以便更快地执行。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-07 10:35:16

您不能同时将多个文件写入同一个tarfile。如果您尝试这样做,这些块将会混合在一起,并且不可能提取它们。

您可以通过启动多个线程来完成此操作,然后每个线程都可以打开一个tarfile,对其进行写操作,然后将其关闭。

我相信您可以端到端地加入tarfiles。通常,这需要在最后读回tarfile文件,但由于这些文件都在内存中(大概大小已经足够小了),所以这不是什么大问题。

如果你采用这种方法,你不会想要5000个单独的线程-- 5000个线程会让机器停止响应(至少在一段时间内),而且压缩会很糟糕。将自己限制为每个处理器只能有一个线程,并用线程来划分工作。

此外,您编写的代码将创建一个包含5000个文件的tar文件,所有文件都名为1_5.data,内容为"bigstringhere...“。我假设这只是一个例子。如果没有,创建一个包含单个文件的BytesIO文件,关闭它(刷新它),然后将结果复制5000次(例如,如果您想要将其写入磁盘,只需将整个tarfile写入5000次)。

我认为最昂贵的部分是压缩-你可以使用外部程序'pigz',它并行地执行gzip压缩。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19378610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档