我正在尝试并行化一些需要实时处理的任务,所以我使用--line-buffer。我正在处理非常长的字符串,但是我注意到有时它会达到行的长度限制,从而产生command line too long
错误,所以我决定通过管道传输它们
但是当我使用--管道选项时,--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上使用parallel 20190422
发布于 2019-06-06 07:51:25
# Pass the data to STDIN, but only after 100 seconds
(echo 1; echo 2; sleep 100) | parallel -j1 --lb --pipe cat
这是由于GNU并行读取默认情况下为1MB。所以GNU并行等待更多的输入。只有在100秒后,STDIN才会关闭,GNU并行才会获得EOF。
您可能会这样做:
(echo 1; echo 2; echo 3; sleep 100) | parallel -j1 --block 1 -N1 --lb --pipe 'date;cat'
但如果行更长,则增加--block
。
https://stackoverflow.com/questions/56464124
复制相似问题