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.