首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在GNU并行中正确使用--shard

在GNU并行中正确使用--shard
EN

Stack Overflow用户
提问于 2021-11-12 19:10:52
回答 1查看 23关注 0票数 1

我想在GNU并行中使用--shard标志来做一些并发控制。

我的输入文件(input.csv)如下所示:

代码语言:javascript
复制
node-foo,op1
node-bar,op2
node-baz,op3
node-foo,op4
node-blah,op5
...

我正在使用parallel向节点发送操作。节点名称可能在第一列中出现多次。我想使用--shard来确保一次最多向一个节点发送一个op。

我的命令看起来像这样:

parallel --shard 1 send_op.sh --node={1} --op={2} ::: input.csv

不幸的是,这不起作用。parallel告诉我:"--shard要求--jobs高于参数的数量。增加--jobs。“

这对我来说没什么意义。如果将--shard设置为高于输入行数(在我的示例中是操作数),这不会破坏--jobs的意义吗?如何实现我想要的并发属性?

EN

回答 1

Stack Overflow用户

发布于 2021-12-04 17:46:16

我想使用--shard来确保每次最多向一个节点发送一个op。

这不是--shard所做的。--shard--pipe的专用版本,您没有使用管道模式。

那么你能做些什么呢?

sem确保只有一个具有该id的作业并行运行。因此,您可能能够:

代码语言:javascript
复制
parallel --colsep , sem --id {1} send_op.sh --node={1} --op={2} :::: input.csv

此解决方案存在一些问题:

  • 的顺序很重要-很重要。如果将所有节点A组合在一起,这些节点将并行占用作业槽,从而减慢处理速度。但是,如果您将--shuf添加到parallel中,顺序将被打乱,因此这将减少issue.
  • sem的启动时间,需要150毫秒。因此,如果您的作业持续时间很短(总挂钟时间小于1秒),您可能会认为这会减慢处理速度。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69947970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档