【问题标题】:How does one Parallelize a shell script with arguments using GNU parallel?如何使用 GNU 并行并行化带有参数的 shell 脚本?
【发布时间】:2019-02-19 01:01:13
【问题描述】:

我是 bash 脚本的新手。我有一个 shell 脚本,它通过终端在 Matlab 中运行多个用于纵向图像处理的函数。我想在终端中并行化进程。

下面是它如何运行的一个简短示例:

./script.sh *.nii -surface -m /Applications/MATLAB_R2018b.app/bin/matlab

*.nii 指的是在不同时间拍摄的单个主题的图像(即 subj1img1 subj1img2 subj3img3)。在我的情况下,每个主题有 3 张图像。因此,在每次运行中,脚本都会遍历单个主题的所有图像。

我想并行化这个过程,以便我可以同时为多个主题运行这个脚本。以我的一点经验阅读 GNU 并行,我无法弄清楚我需要编写的代码来实现它。如果有人有任何建议,我将不胜感激。

【问题讨论】:

标签: bash matlab terminal parallel-processing


【解决方案1】:
parallel ./script.sh {} -surface -m /Applications/MATLAB_R2018b.app/bin/matlab ::: *.nii 

【讨论】:

  • 您好,谢谢。所以我尝试了这个,并且考虑到我想在每次迭代中都有一对文件,我使用了两个 {} {}。但似乎尽管我将并行的最大作业数定义为 3,但它打开 MATLAB 的次数不是 3 次,而是与文件对数(在本例中为 10 个)一样多。不知道该怎么办,因为它会使我的系统过载。有没有办法告诉并行在任何时候都有 3 个工作?这是我的代码:parallel --jobs 3 ./cat_batch_long.sh {} {} -surface -m /Applications/MATLAB_R2018b.app/bin/matlab ::: *.nii
【解决方案2】:

您可以在后台使用 & 在 for 循环中启动它们,如下所示:

for f in *.nii
do
  ./script.sh "$f" -surface -m /Applications/MATLAB_R2018b.app/bin/matlab &
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多