GNU Paralel'i bu while döngüsü için nasıl kullanırım?


12

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:


13

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

Kullanmak mümkün mü teeile paralleliçine çıkışını koyarak ne zaman sortedstuff? Böylece çıktıyı giderken görebiliyorum.
Proletarya

1
@Proletariat - terminale de mi çıkmak istiyorsunuz? Sadece değiştirmek >ile | teeilk komut olur mesela parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
don_crissti

3

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 .


2

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.


3
Eğer 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.
Warren Young
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.