2

Я запускаю команду (pngquant, чтобы быть точным: https://github.com/pornel/pngquant) в окне терминала. Я заметил, что если я открою 4 окна терминала и введу команду pngquant в каждом из них, я получу увеличение скорости в 4 раза, эффективно сжимая в 4 раза больше изображений за то же время, что и раньше.

Поэтому я использовал этот подход и назначил каждому процессу pngqunat часть изображений, которые я хочу сжать, эффективно создав несколько процессов в нескольких потоках.

Можете ли вы выполнить команду в нескольких потоках, не выполняя этих трюков, которые я делал? Я хотел бы просто сказать «запустить сжатие pngquant для всех этих изображений и использовать все доступные потоки».

2 ответа2

1

Расширяя мой предыдущий комментарий в ответ.

Gnu Parallels - это инструмент командной строки, предназначенный для одновременного выполнения заданий, в котором используются несколько потоков, ядер, процессоров, ПК. xargs теперь предлагает аналогичную функциональность с добавлением ключа -P .

Я провел для вас тест на двухъядерном VPS, используя pngquant для конвертации нескольких файлов .png (126 изображений в среднем размером 9 МБ).

pngquant *.png заняло 26 минут.

find . -iname "*.png" | parallel pngquant {} занял 14 минут.

top показывает параллельное выполнение двух команд pngquant одновременно:

  PID USER    PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5808 user    20   0   70948  59164   2140 R 100.0  2.9   0:03.49 pngquant
 5811 user    20   0   70952  61000   2024 R  99.3  3.0   0:05.67 pngquant
0

Вы ищете точно такую же систему, которая требуется для этого недавнего вопроса . Полученный ответ (сценарий на основе Python) будет идеально соответствовать вашим потребностям, если его немного адаптировать для более простого случая.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .