Если вы абсолютно намерены сделать это на Python, тогда, пожалуйста, просто проигнорируйте мой ответ. Если вы заинтересованы в том, чтобы сделать работу просто и быстро, читайте дальше ...
Я бы предложил GNU Parallel , если у вас есть много вещей, которые нужно сделать параллельно, и даже больше, так как процессоры становятся "жирнее" с большим количеством ядер, а не " выше " с более высокими тактовыми частотами (ГГц).
В простейшем случае вы можете использовать ImageMagick просто из командной строки в Linux, macOS и Windows, например, для изменения размера группы изображений:
magick mogrify -resize 128x128\! *.jpg
Если у вас есть сотни изображений, вам лучше запустить параллельное, что будет:
parallel magick mogrify -resize 128x128\! ::: *.jpg
Если у вас есть миллионы изображений, расширение *.jpg
переполнит командный буфер вашей оболочки, так что вы можете использовать следующее для подачи имен изображений в stdin
вместо передачи их в качестве параметров:
find -iname \*.jpg -print0 | parallel -0 -X --eta magick mogrify -resize 128x128\!
Здесь есть две "хитрости" здесь:
Я использую find ... -print0
вместе с parallel -0
для имен файлов с нулевым символом в конце, поэтому в них нет проблем с пробелами,
Я использую parallel -X
, что означает, вместо того, чтобы запускать совершенно новый mogrify
процесс для каждого изображения, GNU Parallel определяет, сколько имен файлов mogrify
может принять, и дает его столько в партиях.
Я рекомендую вам оба инструмента.
В то время как аспекты ImageMagick вышеприведенного ответа работают в Windows, я не использую Windows и не уверен в том, что GNU Parallel там. Я думаю это может работать под git-bash
и / или возможно под Cygwin
- вы можете попробовать задать отдельный вопрос - они бесплатны!
Что касается части ImageMagick, я думаю, что вы можете получить список всех имен файлов JPEG в файле, используя эту команду:
DIR /S /B *.JPG > filenames.txt
Затем вы можете возможно обработать их (не параллельно) следующим образом:
magick mogrify -resize 128x128\! @filenames.txt
И если вы узнаете, как запустить GNU Parallel в Windows, вы можете , вероятно, обработать их параллельно, используя что-то вроде этого:
parallel --eta -a filenames.txt magick mogrify -resize 128x128\!