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



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

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

node-foo,op1
node-bar,op2
node-baz,op3
node-foo,op4
node-blah,op5
...

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

我的命令如下:
parallel --shard 1 send_op.sh --node={1} --op={2} ::: input.csv

不幸的是,这不起作用。CCD_ 6告诉我;--shard要求--jobs大于参数数。增加--jobs">

这对我来说没有意义。如果--jobs被设置为高于输入行的数量(在我的例子中是操作的数量(,这难道不符合--shard的点吗?如何实现所需的并发属性?

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

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

那么你能做什么呢?

sem确保只有具有该id的单个作业并行运行。所以你可以:

parallel --colsep , sem --id {1} send_op.sh --node={1} --op={2} :::: input.csv

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

  • 订单很重要。如果将所有节点A分组在一起,这些节点将并行占用作业区,从而降低处理速度。但是,如果您将--shuf添加到parallel,则顺序将被打乱,因此这将是一个较小的问题
  • sem的启动时间为150ms。因此,如果你的工作时间很短(<1秒的总挂钟时间(,你可能会认为这会减慢你的处理速度

相关内容

  • 没有找到相关文章

最新更新