我想在GNU并行中使用--shard标志来做一些并发控制。
我的输入文件(input.csv)如下所示:
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的意义吗?如何实现我想要的并发属性?
发布于 2021-12-04 17:46:16
我想使用--shard来确保每次最多向一个节点发送一个op。
这不是--shard所做的。--shard是--pipe的专用版本,您没有使用管道模式。
那么你能做些什么呢?
sem确保只有一个具有该id的作业并行运行。因此,您可能能够:
parallel --colsep , sem --id {1} send_op.sh --node={1} --op={2} :::: input.csv此解决方案存在一些问题:
--shuf添加到parallel中,顺序将被打乱,因此这将减少issue.sem的启动时间,需要150毫秒。因此,如果您的作业持续时间很短(总挂钟时间小于1秒),您可能会认为这会减慢处理速度。https://stackoverflow.com/questions/69947970
复制相似问题