我试图并行化一些需要实时处理的任务,所以我使用了--line-buffer。我正在处理很长的字符串,但是后来我发现有时它达到了行长限制,并产生了command line too long
错误,因此我决定将它们传递给管道
但是当我使用--pipe选项时,--line-buffer停止工作
我使用更简单的命令进行了测试,但问题仍然存在
# Returns instantly, but pass the data as args
(echo 1; echo 2; sleep 100) | parallel -j1 --lb cat
# Pass the data to STDIN, but only after 100 seconds
(echo 1; echo 2; sleep 100) | parallel -j1 --lb --pipe cat
我在Arch Linux上使用并行的20190422
答案 0 :(得分:0)
# Pass the data to STDIN, but only after 100 seconds
(echo 1; echo 2; sleep 100) | parallel -j1 --lb --pipe cat
这是由于GNU Parallel默认读取1 MB。因此,GNU Parallel等待更多的输入。只有在100秒后STDIN才会关闭,GNU Parallel会获得EOF。
您可能可以执行以下操作:
(echo 1; echo 2; echo 3; sleep 100) | parallel -j1 --block 1 -N1 --lb --pipe 'date;cat'
但是,如果行长得多,则增加--block
。