Kıvrılma isteklerini bash olarak paralel olarak yürütün


23

Bir bash betiğinden 5 curlistek göndermenin en iyi yolu nedir parallel? Performans nedeniyle onları seri halinde çalıştıramıyorum.


1
Çözümünüzün parçalarını aramayı denediniz mi? Başka bir SF sorusu tam olarak istediğin gibi görünüyor: serverfault.com/questions/248143/…
Theuni

Yanıtlar:


34

İşlemi arka plana çıkarmak için komuttan sonra '&' kullanın ve bitmelerini beklemek için 'wait' (bekleyin). Bir alt kabuk oluşturmanız gerekirse komutların etrafında '()' kullanın.

#!/bin/bash

curl -s -o foo http://example.com/file1 && echo "done1" &
curl -s -o bar http://example.com/file2 && echo "done2" & 
curl -s -o baz http://example.com/file3 && echo "done3" &

wait

Basit, ama ilk adım için etkili. Ana bilgisayar adı veya tekrar sayısı gibi bir şeylerin değişmesi gerektiğinde çabucak bozulur. Teşekkürler.
Chris



0

İşte bir curlörnek xargs:

$ cat URLS.txt | xargs -P 10 -n 1 curl

Yukarıdaki örnekte curlURL'lerin her biri paralel olarak, her defasında 10 olmalıdır. -n 1Böylece orada xargssadece 1 hattı kullanır URLS.txtbaşına dosya curlyürütme.

Xargs parametrelerinin her biri ne yapar:

$ man xargs

-P maxprocs
             Parallel mode: run at most maxprocs invocations of utility at once.
-n number
             Set the maximum number of arguments taken from standard input for 
             each invocation of utility.  An invocation of utility will use less 
             than number standard input arguments if the number of bytes 
             accumulated (see the -s option) exceeds the specified size or there 
             are fewer than number arguments remaining for the last invocation of 
             utility.  The current default value for number is 5000.
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.