在 bash 中并行执行 curl 请求

在 bash 中并行执行 curl 请求

从 bash 脚本执行 5 个curl请求的最佳方法是什么parallel?出于性能原因,我无法串行运行它们。

答案1

在命令后使用“&”可将进程置于后台,使用“wait”可等待进程完成。如果需要创建子 shell,请在命令周围使用“()”。

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

答案2

xargs 有一个“-P”参数,用于并行运行进程。例如:

wget -nv http://en.wikipedia.org/wiki/Linux -O- | egrep -o "http://[^[:space:]]*.jpg" | xargs -P 10 -r -n 1 wget -nv

参考: http://www.commandlinefu.com/commands/view/3269/parallel-file-downloading-with-wget

答案3

我用gnu并行对于这样的任务

答案4

下面是一个curl示例xargs

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

上述示例应curl并行执行每个 URL,每次 10 个。这样-n 1每次执行xargs仅使用文件中的 1 行。URLS.txtcurl

每个 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.

相关内容