微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GNU并行:线程ID

如何解决GNU并行:线程ID

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

是否可以获得运行作业的线程的ID?线程ID是指来自 我的计算机上具有12个线程的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}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。