bashでcurlリクエストを並行して実行する


23

bashスクリプトから5つのcurlリクエストを実行する最良の方法は何parallelですか?パフォーマンス上の理由から、それらをシリアルで実行できません。


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 parallelを使用します。


4
あなたが呼び出すための例を提供できるcurlgnu parallel
m13r

はい、並列処理は非常に優れているようで、同じリクエストを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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.