我在跑A file | B --params > file.txt
。由于我想加快处理速度,所以我使用了parallel -j+0< a.txt
同时运行20个作业。 a.txt 包含所有命令:
A file1 | B --params > file1.txt
A file2 | B --params > file2.txt
A fileN | B --params > fileN.txt
这条路安全吗?并行运行时,不同程序的标准输出会混乱吗?
答案1
并行运行时,不同程序的标准输出会混乱吗?
如果它们都是独立的进程写入单独的文件,则情况并非如此——它们的每个实例B
都是不同的,并且输出到它自己的位置。
答案2
只要 B 的每个实例写入不同的文件,就可以了。然而,这种方法的安全性最终取决于 B.
例如,当我尝试执行与您的解决方案类似的操作时,我过去曾被编码不良的程序所困扰。就我而言,程序使用srand(time(NULL))
并写入rand()
基于 - 的临时文件。当程序的 10 个实例同时启动时,这会严重破坏,因为它们都写入同一个临时文件。
只要你的程序不包含这样的错误,并且不写入某些固定路径,就应该没问题。
答案3
这是唯一的情况不是安全的是 A 或 B 写入程序中硬编码的资源(例如 /etc/passwd)。
但对于绝大多数程序来说不是案子。因此并行运行它们是安全的。