parallel-processing - GNU 并行 : suppress warning about increasing blocksize

标签 parallel-processing gnu

我正在使用 GNU Parallel在文件的每一行上同时执行一个命令。尽管它不会对结果造成任何问题,但 GNU parallel 会发出许多以下类型的警告,使输出变得困惑:
parallel: Warning: A full record was not matched in a block. Increasing to --blocksize 1363150
我认为这只是意味着我选择使用的块大小在输入边界上不太匹配,因此并行增加块大小也是如此。正如我所说,我不相信这会导致输出结果出现任何问题,这不是我需要一遍又一遍甚至一次重复看到的警告。有没有办法专门抑制这些警告?我真的不想完全重定向 stderr 并错过任何重要消息。

最佳答案

你的假设是错误的。 GNU Parallel 告诉您的是它已经读取了一个完整的块并且您的记录无法容纳该大小。所以加大尺寸。 GNU Parallel 告诉您“--blocksize 1363150”就足够了,但您可能希望进一步增加它,例如“--block 3M”。

如果您将 '--blocksize' 设置为最大记录大小的至少 2 倍,您将永远不会看到警告。

从技术上讲,它发生的事情是 GNU Parallel 读取一个完整的块(在这个例子中让我们说 7 个字节)并将它附加到它的缓冲区。它试图在它的缓冲区中找到一个完整的记录(在这个例子中让我们说一个完整的行)。如果不能,它会向您发出警告,以指数方式(缓慢地)增加块大小并再次尝试:

输入数据:

12345\n
123456\n
1234567\n
12345678\n
123456789\n
1234567890\n

GNU Parallel 一次读取 7 个字节:
12345\n
1

缓冲区包含一整行,所以一切都很好。
23456\n
1

缓冲区包含一整行,所以一切都很好。
234567

缓冲区不包含整行,因此您会收到警告并且 --blocksize 增加到 8:
\n
1234567

缓冲区现在包含一整行,所以一切都很好。
8\n
123456

缓冲区包含一整行,所以一切都很好。
789\n
1234

缓冲区包含一整行,所以一切都很好。
567890\n

缓冲区包含一整行,所以一切都很好。

关于parallel-processing - GNU 并行 : suppress warning about increasing blocksize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188993/

相关文章:

vb.net - 并行循环和 Nlog

c - 如何使用所有处理器在 MPI 中发送/接收

c++ - 线程池对英特尔线程构建模块有用吗?

c - Linux/将目录作为文件打开

python - 这是在 IPython 中分配变量和直接在数组中工作的区别

go - slice 的长度在已经使用 WaitGroup 时有所不同

c - GNU GMP 库的 Cramer-Shoup 加密方案实现失败

c++ - 在 gcc linux 中编译时出现一堆错误和警告

c - timespec 的存储大小未知

makefile - 将先决条件扩展推迟到(不同的)目标创建之后