Bir while döngüm var:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Ancak bu uzun zaman alabilir. GNU Paralel'i bu while döngüsü için nasıl kullanırım?
Bir while döngüm var:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Ancak bu uzun zaman alabilir. GNU Paralel'i bu while döngüsü için nasıl kullanırım?
Yanıtlar:
While döngüsü kullanmıyorsunuz.
parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts
live_hosts(Ör. /some/dir/file) İçinde genişleyeceği sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file(sonuç olarak no such file or directory) yollarınız varsa bunun işe yaramayacağını unutmayın ; bu durumlarda kullanın {//}ve {/}( ayrıntılar için gnu-parallelkılavuza bakın):
parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts
>ile | teeilk komut olur mesela parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
Bir eski okul "bir şey yap ve iyi yap" olarak, Unix adam, dize değiştirme şeylerini bir sarıcı komut dosyasına koyardım:
#!/bin/sh
sortstuff.sh -a "$1" > sortedstuff-"$1"
Eğer ararsanız, onu aramak wrapper.shiçin parallelkomut:
parallel wrapper.sh < live_hosts
catHarici bir program çağrışımı kaydeden bu tür bir şeye ihtiyacınız olmadığını unutmayın .
Sen yok gerek parallel döngünün gövdesi önceki tekrarlamalar bağlı değildir, çünkü. Her ana bilgisayar için yeni bir arka plan işlemi başlatmanız yeterlidir.
while read host; do
sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait # Optional, to block until the background tasks are done
parallelyine de belirli yönleri yönetmeyi kolaylaştırır; paralel çalışan iş sayısını daha kolay sınırlayabilirsiniz.
wc -l live_hostsdisk iği veya CPU çekirdeği sayısından fazla ise - görevin I / O veya CPU'ya bağlı olmasına bağlı olarak - böyle bir çözümle paralellikten elde ettiğiniz avantajı çok fazla yiyeceksiniz. İş parallelsayısını sınırlama yeteneği sadece hoş değil, aynı zamanda işlem hızı hedefinizse çok önemlidir.
teeileparalleliçine çıkışını koyarak ne zamansortedstuff? Böylece çıktıyı giderken görebiliyorum.