在Shell中进行并行化的最佳方法

时间:2019-04-11 14:10:29

标签: macos shell parallel-processing

我有一个实验,需要多次执行并跟踪其执行时间。

我的python代码需要使用不同的输入多次运行,但是对于相同的输入也需要多次运行,以获取每个输入的平均执行时间。

我正在考虑使用并行化(并且我正在bash中进行此操作),但是我不知道如何处理它,因为我需要跟踪所有内容,然后在图形中表示结果。

我担心的是,如果我想使用命令parallel将所有内容保存在一个文件中,因为我无法控制哪个作业先结束,所以我将获得无序数据。例如,如果我决定将某个输入的所有输出都放在一个文件中(分配给该特定输入),然后从中取平均值,那么我将得到许多文件,这可能会使下一步变得更加困难。

我不是要代码,我只是想更好地了解(如果可能)我可以使用的算法。也许是一种控制parallel创建的作业顺序(FIFO)的方法,也许是另一种并行化工具...?帮助

2 个答案:

答案 0 :(得分:1)

其中之一可以为您工作吗?

parallel --keep-order myexperiment ::: a r g s 1 ::: a r g s 2 > output-in-order
parallel --results mydir/ myexperiment ::: a r g s 1 ::: a r g s 2
parallel --results myfile{1}-{2} myexperiment ::: a r g s 1 ::: a r g s 2
parallel --results myfile.tsv myexperiment ::: a r g s 1 ::: a r g s 2

如果您是科学家,那么最后一个很有趣,因为R可以直接读取它。

答案 1 :(得分:0)

您一次启动所有脚本(例如循环运行),每个脚本将其结果重定向到单独的文件

为此,例如在测试日志的命名中使用

Log_file_name. $$. Log => Log_file_name.1548.log

$$:返回脚本的进程号(是一个值)

我希望这可以帮助您