【问题标题】:GNU Parallel: thread idGNU 并行:线程 ID
【发布时间】:2020-09-10 18:25:19
【问题描述】:

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

是否可以获得运行作业的线程的 ID?使用线程ID,我的意思是一个数字 我的机器上有 1 到 12 个线程,有 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 个文件,如果一个文件上的一个线程完成,下一个线程可以立即再次使用这个文件。

【问题讨论】:

  • 试试jobslot号parallel -j12 -k echo {%} ::: {1..36}

标签: gnu-parallel


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 2016-03-03
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2015-05-07
    相关资源
    最近更新 更多