Исходя из вашего комментария,
@ Уроборус нет, не рассматривайте это opensource.com/article/18/5/gnu-parallel. Я хочу запустить программу Python вместе с этой параллелью ..для очень конкретного случая ... если произвольная программа конвертирования может быть передана в параллель ... почему бы не программа на Python?
Я думаю, что это может помочь:
convert
не был выбран произвольно.Она была выбрана потому, что это более известная программа, которая (приблизительно) отображает один входной файл, предоставленный через командную строку, в один выходной файл, также предоставленный через командную строку.
Типичная оболочка for
цикл может быть использован для перебора списка.В статье, на которую вы ссылаетесь, они показывают пример
for i in *jpeg; do convert $i $i.png ; done
. Это (опять же, приблизительно) берет список имен файлов и применяет их, один за другим, к шаблону команды, а затем запускает эту команду.
Проблема здесь в том, что for
обязательно будет ждать завершения команды, прежде чем запускать следующую, и, следовательно, может недостаточно использовать современные многоядерные процессоры.
parallel
действует своего родазамены на for
.Предполагается, что команда может быть выполнена несколько раз одновременно, каждый с разными аргументами, без вмешательства каждого экземпляра в другие.
В статье они показывают команду, используя parallel
find . -name "*jpeg" | parallel -I% --max-args 1 convert % %.png
, что эквивалентно предыдущей команде for
.Разница (все еще приблизительно) в том, что parallel
запускает несколько вариантов шаблонной команды одновременно, не обязательно ожидая завершения каждой из них.
Для вашей конкретной ситуации, чтобы можно было использовать parallel
, вам необходимо:
- Отрегулировать скрипт Python таким образом, чтобы он принимал один ввод (например, имя файла) и один вывод (также возможно имя файла), оба из командной строки.
- Узнайте, как настроить
parallel
, чтобы он мог получить список этих имен файлов для вставки в шаблон команды для запуска скрипта python для каждого из этих файлов по отдельности.