GNU Parallel

时间:2018-03-29 03:48:25

标签: python bash gnu-parallel

我有一个为我运行模拟的python代码,我需要为许多不同的参数(字符串,整数和另一个字符串整数)运行此代码。我的问题是,当我尝试将此并行化与GNU并行时,我的参数部分不会通过(我的第一个字符串)。可能对此负责的特定行是:

parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' ::: \
$(seq 16) ::: \
${gens[@]}

我从python获得的错误信息是:

  

追踪(最近的呼叫最后):
  文件“compute-heat-capacity-generational-2”,第20行,

     

iterNum = int(argv [3])> IndexError:列表索引超出范围

所以我的论点中只有两个经过,我的并行中分配给{1}{2}的参数。无论出于何种原因,当我尝试使用并行时,$sim似乎没有按预期工作。

完整的脚本写在下面,我将模拟目录作为输入,循环遍历目录以解析世代号,然后将这两个文件移交到我遍历所有代的并行,第三个参数迭代{ {1}}

非常感谢任何有关如何使用并行的建议。过去几天我花了大部分时间阅读手册和示例,但我无法解决这个问题。我很确定这个问题很简单,我如何标记我的参数`{}'并将它们输入它们,但我似乎无法找到合适的组合来实现它。

${seq 16}

1 个答案:

答案 0 :(得分:1)

尝试在并行参数中使用双引号,或在调用export sim之前执行parallel

parallel --bar --eta -j14 "python3 compute-heat-capacity-generational-2 $sim {1} {2}" ::: \
$(seq 16) ::: \
${gens[@]}
    如果字符串使用单引号('),则
  1. bash不会扩展字符串中的变量。
  2. 如果您执行export sim,变量将对子流程可见,您的变量将在稍后展开。