За допомогою GNU Parallel ви робите:
parallel script-to-run.sh input/ output/ {} ::: {0..99}
Додайте, -P8
якщо ви не хочете виконувати одне завдання на ядро процесора.
Навпаки xargs
це буде робити The Right Thing, навіть якщо вхідні дані містять пробіл, ', або "(хоча це не так). Він також гарантує, що результати з різних завдань не змішуються разом, тому, якщо ви використовуєте вихідні дані, гарантуємо, що ви не отримаєте половину лінії від двох різних робіт.
GNU Parallel - загальний паралелізатор, що дозволяє легко виконувати завдання паралельно на одній машині або на декількох машинах, до яких у вас є доступ до ssh.
Якщо у вас є 32 різних завдання, які ви хочете запустити на 4 процесорах, прямий спосіб паралелізації - це 8 завдань на кожному процесорі:
Натомість GNU Parallel породжує новий процес, коли він закінчується - підтримуючи активність центральних процесорів і тим самим заощаджуючи час:
Встановлення
Якщо GNU Parallel не упакований для вашого розповсюдження, ви можете виконати особисту установку, яка не потребує кореневого доступу. Це можна зробити за 10 секунд, виконавши наступне:
$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 67bd7bc7dc20aff99eb8f1266574dadb
12345678 67bd7bc7 dc20aff9 9eb8f126 6574dadb
$ md5sum install.sh | grep b7a15cdbb07fb6e11b0338577bc1780f
b7a15cdb b07fb6e1 1b033857 7bc1780f
$ sha512sum install.sh | grep 186000b62b66969d7506ca4f885e0c80e02a22444
6f25960b d4b90cf6 ba5b76de c1acdf39 f3d24249 72930394 a4164351 93a7668d
21ff9839 6f920be5 186000b6 2b66969d 7506ca4f 885e0c80 e02a2244 40e8a43f
$ bash install.sh
Інші варіанти встановлення див. На http://git.savannah.gnu.org/cgit/parallel.git/tree/README
Вчи більше
Див. Інші приклади: http://www.gnu.org/software/parallel/man.html
Перегляньте вступні відео: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Пройдіть підручник: http://www.gnu.org/software/parallel/parallel_tutorial.html
Підпишіться на список розсилки, щоб отримати підтримку: https://lists.gnu.org/mailman/listinfo/parallel