san*_*san 12 linux parallel-processing copy cat
我正在使用Python多处理为每个进程生成一个临时输出文件.它们的大小可以是几GB,我可以制作几十个.这些临时文件需要合并以形成所需的输出,这是证明是瓶颈(和并行杀手)的步骤.是否有一个Linux工具可以通过修改文件系统元数据而不是实际复制内容来创建连接文件?只要它适用于我可以接受的任何Linux系统.但是文件系统特定的解决方案不会有太大帮助.
我不是OS或CS的训练,但在理论上似乎应该有可能创造一个新的inode并复制了从我想从复制文件的inode的inode的指针结构,然后取消与这些索引节点.是否有任何实用程序可以做到这一点?考虑到经过深思熟虑的unix实用程序的过多,我完全可以预料到它,但找不到任何东西.因此我的问题是关于SO的.文件系统位于块设备上,实际上是硬盘,以防这些信息很重要.我没有信心自己编写这个,因为我以前从未做过任何系统级编程,所以任何指针(对C/Python代码的反转)都会非常有用.
Mar*_*utz 14
即使有这样的工具,只有当除了最后一个文件之外的文件的大小是文件系统块大小的倍数时,这才有效.
如果您控制将数据写入临时文件的方式,并且您知道 每个文件的大小,则可以执行以下操作
这样,进程将协作填充单个输出文件,从而无需在以后将它们组合在一起.
编辑
如果您无法预测单个文件的大小,但最终文件的使用者可以使用顺序(而不是随机访问)输入,您可以cat tmpfile1 .. tmpfileN在stdin上提供给使用者
cat tmpfile1 ... tmpfileN | consumer
Run Code Online (Sandbox Code Playgroud)
或者通过命名管道(使用bash的Process Substitution):
consumer <(cat tmpfile1 ... tmpfileN)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15365 次 |
| 最近记录: |