Jadi saya memiliki loop sementara:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Tapi ini bisa memakan waktu lama. Bagaimana saya menggunakan GNU Parallel untuk loop sementara ini?
Jadi saya memiliki loop sementara:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Tapi ini bisa memakan waktu lama. Bagaimana saya menggunakan GNU Parallel untuk loop sementara ini?
Jawaban:
Anda tidak menggunakan loop sementara.
parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts
Perhatikan bahwa ini tidak akan berfungsi jika Anda memiliki jalur di live_hosts
(misalnya /some/dir/file
) karena akan diperluas ke sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file
(menghasilkan no such file or directory
); untuk kasus-kasus tersebut gunakan {//}
dan {/}
(lihat gnu-parallel
manual untuk detail):
parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts
>
dengan | tee
misalnya perintah pertama menjadi parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
Sebagai sekolah tua "lakukan satu hal dan lakukan dengan baik" Unix guy, saya akan memasukkan barang substitusi string ke dalam skrip pembungkus:
#!/bin/sh
sortstuff.sh -a "$1" > sortedstuff-"$1"
Jika Anda memanggilnya wrapper.sh
, parallel
perintah untuk memanggilnya adalah:
parallel wrapper.sh < live_hosts
Perhatikan bahwa Anda tidak perlu cat
untuk hal semacam ini, yang menyimpan permintaan program eksternal.
Anda tidak perlu parallel
, karena tubuh loop tidak tergantung pada iterasi sebelumnya. Mulai saja proses latar belakang baru untuk setiap host.
while read host; do
sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait # Optional, to block until the background tasks are done
parallel
memang membuatnya lebih mudah untuk mengelola aspek-aspek tertentu; Anda dapat membatasi jumlah pekerjaan yang berjalan secara paralel dengan lebih mudah.
wc -l live_hosts
lebih dari jumlah poros disk atau inti CPU - tergantung pada apakah tugasnya I / O atau terikat CPU - Anda akan memakan banyak keuntungan yang Anda dapatkan dari paralelisme dengan solusi seperti itu. Kemampuan parallel
untuk membatasi jumlah pekerjaan tidak hanya bagus, itu hampir esensial, jika kecepatan pemrosesan adalah tujuan Anda.
tee
denganparallel
saat meletakkan output kesortedstuff
? Jadi saya bisa melihat outputnya.