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-parallel
kılavuza bakın):
parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts
>
ile | tee
ilk 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.sh
için parallel
komut:
parallel wrapper.sh < live_hosts
cat
Harici 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
parallel
yine 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_hosts
disk 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. İş parallel
sayısını sınırlama yeteneği sadece hoş değil, aynı zamanda işlem hızı hedefinizse çok önemlidir.
tee
ileparallel
içine çıkışını koyarak ne zamansortedstuff
? Böylece çıktıyı giderken görebiliyorum.