Для простоты рассмотрим cat, преобразователь идентификаторов (т. е. ввод -> вывод) и TSV. файл из трех столбцов (созданный на лету с помощью вставки и seq)
Код: Выделить всё
n=1000000
map=cat # identity: inp -> out
rm -f tmp.col{1,2}.fifo
mkfifo tmp.col{1,2}.fifo
paste (cut -f2 | $map > tmp.col2.fifo) \
| cut -f3- \
| paste tmp.col{1,2}.fifo - \
| python -m tqdm > /dev/null
ПРИМЕЧАНИЕ: python -m tqdm > /dev/null выводит скорость
Далее мы можем распараллелить задачи сопоставления, используя аргументы GNU Parallel --pipe --keep-order. Вот минимальный работающий параллельный пример:
Код: Выделить всё
seq 100 | parallel --pipe -k -j4 -N10 'cat && sleep 1'
Код: Выделить всё
n=1000000
map=cat # identity map: inp -> out
rm -f tmp.col{1,2}.fifo
mkfifo tmp.col{1,2}.fifo
paste (cut -f2 | parallel --id jobB --pipe -k -j4 -N1000 "$map" > tmp.col2.fifo) \
| cut -f3- \
| paste tmp.col{1,2}.fifo - \
| python -m tqdm > /dev/null
Почему он зависает и как его разморозить?
Окружающая среда: Linux 5.15.0-116-generic, Ubuntu 22.04.4 LTS на x86_64
Подробнее здесь: https://stackoverflow.com/questions/788 ... el-freezes
Мобильная версия