Źródło: http://www.gnu.org/software/parallel/ |
Czasem zdarzają mi się zadania wymagające obliczeniowo. Przykładowo konwersja plików audio z jednego na drugi format, czy przeskalowanie całej kolekcji zdjęć.
Dzisiaj właśnie musiałem zmienić rozdzielczość ok 1500 zdjęć. Jak to zrobić - wiadomo. ImageMagick zrobi wszystko. Zdjęcia z jednego katalogu można przeskalować (zrobić z nimi cokolwiek) takim one-linerem w bashu:
for file in *.jpg; do convert $file -resize 50% small-$file; done
Ale od czego mamy 4 (lub więcej) rdzeni w tych super-hiper wypasionych komputerach? Właśnie po to, by ich używać. Zdjęcia można skonwertować na przykład tak:
parallel -j4 convert {} -resize 50% small-{} ::: *.jpg
gdzie:
- -j4 oznacza ile zadań można równolegle uruchomić;
- {} są nazwą pliku wejściowego, a w zasadzie tym, co dopasowało się do wyrażenia *.jpg
Na koniec bonusik - konwersja plików FLAC na MP3:
parallel -j4 ffmpeg -i {} -f mp3 -ab 320000 {.}.mp3 ::: *.flac
Ja sam benchmarków nie robiłem, ale ktoś już zrobił. Na pewno jest szybciej.