Xargs ile ilerlemeyi izleme


11

Ben böyle bir şey giriş parametreleri kümesi üzerinde bir komut yürütmek için xargs kullanıyorum:

cat <someinput> | xargs -n 1 -P 5 <somecmd>

Giriş dosyası gerçekten çok uzun ve çalışması uzun sürüyor. Bu yüzden sadece komut isteminin görünmesini bekliyorum. Tamamlanan girdi bağımsız değişkenlerinin sayısı için bir ilerleme çubuğu görüntülemenin bir yolu var mı?

'Bar' kullanmayı denedim ama daima 'sonsuz' bir verim aldım. Görünüşe göre xargs komutları çalıştırmadan önce tüm girdiyi okur.

http://i.stack.imgur.com/5Wsgx.gif

Yanıtlar:


13

GNU Paraleliniz varsa şunları çalıştırabilirsiniz:

cat <someinput> | parallel --bar -P 5 <somecmd>

GNU Parallel genel bir paralelleştiricidir ve işleri aynı makinede veya ssh erişimine sahip olduğunuz birden fazla makinede paralel olarak çalıştırmayı kolaylaştırır.

4 CPU'da çalıştırmak istediğiniz 32 farklı işiniz varsa, paralelleştirmenin basit bir yolu her CPU'da 8 iş çalıştırmaktır:

Basit zamanlama

Bunun yerine GNU Parallel işlem bittikten sonra yeni bir işlem oluşturur - CPU'ları aktif tutar ve böylece zaman kazanır:

GNU Paralel zamanlama

Kurulum

Kişisel kurulum root erişimi gerektirmez. Bunu yaparak 10 saniye içinde yapılabilir:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Diğer kurulum seçenekleri için bkz. Http://git.savannah.gnu.org/cgit/parallel.git/tree/README

Daha fazla bilgi edin

Daha fazla örneğe bakın: http://www.gnu.org/software/parallel/man.html

Giriş videolarını izleyin: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Eğiticiyi gözden geçirin: http://www.gnu.org/software/parallel/parallel_tutorial.html

Destek almak için e-posta listesine kaydolun: https://lists.gnu.org/mailman/listinfo/parallel


1
çok teşekkür ederim (cevap için ve yazılımı yazmak için!), harika çalışıyor!
Greg Sadetsky

9

Pv kullanabilirsiniz:

cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>

Bununla, bazı girişlerin okunmasının nerede olduğunu bileceksiniz , böylece bazı girişlerin tedavisinin yaklaşık olarak nerede olduğunu bileceksiniz .


1
Başka bir sık ​​kullanım durumu find ile kombinasyon olabilir:FIND=( find "$DIR" -type f ) && ${FIND[@]} -print0 | pv -0lps $(${FIND[@]} | wc -l) | xargs -0 -I {} -P 5 <somecmd>
mxmlnkn

3

Sadece genel bir ilerleme göstergesi arıyorsanız, en basit yöntem, yapmak istediğiniz komutu yapmadan önce yankılanmaktır.

Misal: cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'

-I{}{}işlenmekte olan geçerli dizeye ayarlanır

sh -cbirden fazla komut çalıştırmanıza izin verir (not: son komut dahil her komutun ardından yarım-sütun .

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.