Выполнять запросы curl параллельно в bash


23

Каков наилучший способ выполнить 5 curlзапросов parallelиз bash-скрипта? Я не могу запустить их в сериале по соображениям производительности.


1
Вы пытались найти части вашего решения? Другой вопрос SF, кажется, именно то, что вы просите: serverfault.com/questions/248143/…
Theuni

Ответы:


34

Используйте '&' после команды, чтобы создать фоновый процесс, и 'wait', чтобы дождаться их завершения. Используйте '()' вокруг команд, если вам нужно создать под-оболочку.

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

Да, параллель кажется очень хорошей, и один и тот же запрос легко отправить 100 раз. Но пример того, как использовать параллель с отправкой 100 различных запросов curl, улучшит этот ответ.
рüффп


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.