GNU 并行:线程 ID

GNU Parallel: thread id

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

是否可以获取线程的 ID 运行 作业?。对于线程 ID,我的意思是来自 1 到 12 在我的机器上有 12 个线程。截至目前,我使用以下解决方法:

doit() {
    let var=*12+
    echo $var 
}
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}