GNU Parallel: опция --line-buffer не работает с --pipe - PullRequest
3 голосов
/ 05 июня 2019

Я пытаюсь распараллелить некоторые задачи, которые нужно обрабатывать в реальном времени, поэтому я использовал --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

Я использую параллельную 20190422 в Arch Linux

1 Ответ

0 голосов
/ 06 июня 2019
# Pass the data to STDIN, but only after 100 seconds
(echo 1; echo 2; sleep 100) | parallel -j1 --lb --pipe cat

Это связано с тем, что GNU Parallel читает 1 МБ по умолчанию. Так что 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.

...