GNU并行:线程id



在GNU并行中,使用-j选项可以指定并发作业的数量。

是否可以获取运行作业的线程的id?。对于线程id,我指的是来自我的机器上有1到12个螺纹。到目前为止,我使用以下解决方法:

doit() {
let var=$1*12+$2
echo $var $2
}
export -f doit
for ((i=0;i<2;++i))
do
parallel -j12 doit ::: $i ::: {1..12} 
done

这就造成了循环的每次迭代都要等待所有12个线程完成的问题。我只对不同时运行具有相同线程id的迭代感兴趣。

我这样做的动机是每个线程对12个文件中的一个使用写锁。我得到了整整12个文件,如果一个文件上的线程完成,下一个线程可以立即再次使用这个文件。

正如@MarkSetchell所写,您应该使用替换字符串{%},它给出了作业批号:

parallel --line-buffer -j12 'echo starting job {#} on {%}; sleep {=$_=rand()*30=}; echo finishing job {#} on {%}' ::: {1..50}

相关内容

  • 没有找到相关文章

最新更新