gnu 并行的等待行为在管道中如何工作?

问题描述 投票:0回答:1

我正在 WSL 上使用来自

apt install parallel
的并行。

我希望了解解释的机制

  • 第一个号码出现之前要等多久
  • 每秒会打印什么数字。
  • 为什么最后会一次性打印所有数字

具体问题

  1. seq 10 | parallel -j 1 'sleep 1; echo {}' | parallel -j 4 'echo "prefix" {}'
  2. seq 10 | parallel -j 4 'sleep 1; echo {}' | parallel -j 1 'echo "prefix" {}'
  3. seq 10 | parallel -j 4 'sleep 1; echo {} | echo "prefix" {}'

为什么选项 1 等待 6 秒,开始每秒打印 1 条,直到前缀 5,然后从 6 到 10 一次性转储所有内容?

为什么选项2等待1秒,然后在接下来的3秒内输出1-3、4-7、8-10?

为什么选项3等待1秒,然后在接下来的3秒内输出1-4、5-8、9-10?

一般问题

以下设计有什么不同

  1. 输入|并行命令1 |并行命令2(映射到上面的选项1和2)
  2. 输入|并行'命令1 | command2'(映射到上面的选项 3)
  3. 输入|并行命令1 |命令2

我目前没有具体的用例,但试图了解在 3 种设计中做出决定时所涉及的考虑因素。

parallel-processing gnu-parallel
1个回答
0
投票

您遇到了一些蹩脚的设计,现已得到改进。

今天的输出延迟了一项作业(即作业 1 的输出在作业 2 完成时打印)。

$ seq 10 | parallel -j 1 'sleep 1; echo {}' | parallel-20210922 -j 4 'echo "prefix" {}' | timestamp -d
4.445 prefix 1
4.451 prefix 2
4.456 prefix 3
5.552 prefix 4
6.564 prefix 5
7.686 prefix 6
8.817 prefix 7
9.948 prefix 8
11.082 prefix 9
11.086 prefix 10

$ seq 10 | parallel -j 1 'sleep 1; echo {}' | parallel-20211022 -j 4 'echo "prefix" {}' | timestamp -d
2.199 prefix 1
3.295 prefix 2
4.409 prefix 3
5.527 prefix 4
6.541 prefix 5
7.663 prefix 6
8.793 prefix 7
9.924 prefix 8
11.066 prefix 9
11.070 prefix 10
© www.soinside.com 2019 - 2024. All rights reserved.