Виконуйте запити на вигин паралельно в bash


23

Який найкращий спосіб виконати 5 curlзапитів parallelіз сценарію bash? Я не можу запускати їх послідовно з міркувань продуктивності.


1
Ви намагалися шукати частини вашого рішення? Здається, ще одне питання SF - саме те, що ви запитуєте: serverfault.com/questions/248143/…
Theuni

Відповіді:


34

Використовуйте "&" після команди, щоб фоновий процес, і "зачекайте", щоб дочекатися їх завершення. Використовуйте "()" навколо команд, якщо вам потрібно створити підзагін.

#!/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

Простий, але ефективний для першого кроку. Швидко отримує хакі, коли потрібні зміни, наприклад, ім’я хосту чи кількість повторень. Спасибі.
Кріс


6

Я використовую gnu паралельно для таких завдань.


4
Чи не могли б ви навести приклад для виклику curlз gnu parallel?
m13r

Так, паралель здається дуже хорошим і легко надіслати один і той же запит 100 разів. Але приклад того, як використовувати паралельно з надсиланням 100 різних запитів на вигин, полегшить цю відповідь.
рüффп


0

Ось curlприклад із xargs:

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

Наведений вище приклад повинен мати curlкожну з URL-адрес паралельно, по 10 одночасно. -n 1Є так , що xargsвикористовує тільки 1 рядок з URLS.txtфайлу на curlвиконання.

Що робити кожен з параметрів xargs:

$ 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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.