SORU
1 EYLÜL 2008, PAZARTESİ


Parallelize Bash süreçlerin azami sayısı ile Script

Bash bir döngü var diyelim:

for foo in `some-command`
do
   do-something $foo
done

do-something cpu bağlıdır ve güzel parlak 4 çekirdekli işlemci var. 4 do-somethingkadar çalıştırmak mümkün'anda s. olmak istiyorum

Naif bir yaklaşım gibi görünüyor:

for foo in `some-command`
do
   do-something $foo &
done

Bu çalışacaktırtümdo-somethingBir kez, ama birkaç olumsuzlukları, o sahne-bir şeyler yap da bazı önemli I/O olabilir esas vardırtümbir kez de yavaşlatabilir biraz. Diğer sorun bu kod bloğu hemen, bu yüzden hiçbir yolu do-somethingTüm s bittiğinde diğer iş için döndürür.

Nasıl her zaman X do-somethings aynı anda çalışan var bu yüzden bu döngü yazmak ister misin?

CEVAP
19 Mayıs 2009, Salı


Xargs yapmak istediğinize bağlı olarak da (burada: pdf2ps ile dönüştürme belgeler) yardımcı olabilir:

cpus=$( ls -d /sys/devices/system/cpu/cpu[[:digit:]]* | wc -w )

find . -name \*.pdf | xargs --max-args=1 --max-procs=$cpus  pdf2ps

Gelen dokümanlar:

--max-procs=max-procs
-P max-procs
       Run up to max-procs processes at a time; the default is 1.
       If max-procs is 0, xargs will run as many processes as  possible  at  a
       time.  Use the -n option with -P; otherwise chances are that only one
       exec will be done.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Helen Bradley

    Helen Bradle

    4 Mart 2008
  • jeffisthecoolguy

    jeffisthecoo

    17 HAZİRAN 2013
  • The Amazing Atheist

    The Amazing

    20 Kasım 2006