GNU Paralel Poor Man diimplementasikan dalam ksh?

8

Saya ingin menggunakan fitur GNU parallel di mana ia dapat mengeksekusi perintah dan daftar itu dimasukkan secara paralel dan meludahkannya setelah semuanya selesai, namun, saya tidak ingin menginstal GNU parallel di semua server kami.

Atau mungkin versi paralel xargs?

Apakah ada implementasi ksh dari apa yang dilakukan GNU Parallel? Dalam hal ini, itu tidak harus dilakukan dalam rangka seperti halnya GNU Parallel - sepanjang semua output dapat disalurkan atau disimpan. Saya juga ingin menghindari menggunakan file sementara.

Nitrodist
sumber
GNU Parallel adalah skrip perl tunggal. Saya ingin tahu mengapa Anda lebih suka menginstal skrip ksh daripada menginstal skrip perl tunggal yang dirancang untuk memiliki sedikit ketergantungan. Dapatkah Anda menguraikan itu? (Pengungkapan: Saya adalah penulis GNU Parallel)
Ole Tange

Jawaban:

6

Jika Anda ingin memparalelkan pada mesin dengan banyak inti, Anda bisa menggunakan (GNU) xargs, misalnya:

echo seq_[0-9][0-9].gz | xargs -n 1 -P 16 ./crunching

Artinya: xargsmemulai hingga 16 proses secara paralel ./crunchingdengan menggunakan 1 token dari stdin untuk setiap proses.

Anda juga dapat menggunakan splitdalam kombinasi dengan xargs.

Atau Anda dapat membuat Makefile sederhana untuk eksekusi dan panggilan Pekerjaan make -f mymf -j $CORES(Anda memerlukan file sementara untuk solusi ini).

PS: Manual paralel GNU juga mencakup beberapa perbandingan dengan alat lain, termasuk xargs dan make , yang menariknya mereka tulis:

(Versi awal paralel GNU secara kebetulan diimplementasikan menggunakan make -j).

maxschlepzig
sumber
Penting bagi penanya bahwa "semua output dapat disalurkan atau disimpan". xargsterkenal buruk ketika dijalankan secara paralel karena output dapat bercampur.
Ole Tange
@maxschlepzig: Saya setuju dengan jawaban Anda 100%, saya selalu menggunakan xargs. Banyak orang tidak tahu bahwa GNU xargs mampu melakukan paralel!
JM Becker
0

Lihat di parallel --embedmana embed GNU Parallel ke dalam skrip shell yang sama dengan tempat Anda menggunakannya.

parallel --embed > new_script

lalu edit skrip baru.

Ole Tange
sumber