Как использовать все ядра с циклом for - PullRequest
2 голосов
/ 24 марта 2020

У меня есть скрипт, который обрабатывает каждый файл в каталоге. Каждое выполнение djvu2pdf занимает много времени и использует только одно из моих четырех процессорных ядер:

for i in  *.djvu; do djvu2pdf "$i"; done

Чтобы ускорить общую обработку, я хочу запустить четыре djvu2pdf процесса параллельно.

Как мне изменить мой сценарий, чтобы я получил четыре конвейера вместо текущего одного конвейера?

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Может быть, разветвление поможет тебе? Вы можете заключить основную часть обработки в функцию, например, вот так:

topdf() {
    local djvu_file=$1
    djvu2pdf "$djvu_file"
}

for i in  *.djvu; do topdf "$i" & done

Как видите, есть символ "&", который говорит, что операция должна быть отправлена ​​в фоновый режим.

1 голос
/ 24 марта 2020

С GNU Parallel :

parallel djvu2pdf ::: *.djvu

По умолчанию он запускает одно задание для каждого ядра ЦП, но вы можете установить больше или меньше заданий параллельно с parallel -j N, где N - это номер, который вам нужен.

Вы также можете получить индикатор выполнения с помощью parallel --bar ...

Вы также можете сделать "dry run" для Посмотрите, что он будет делать, фактически ничего не делая с parallel --dry-run ...

См. также здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...