Executar solicitações de curvatura em paralelo no bash

23

Qual é a melhor maneira de executar 5 curlsolicitações em parallelum script bash? Não posso executá-los em série por motivos de desempenho.

Justin
fonte
1
Você já tentou procurar partes da sua solução? Outra questão SF parece ser exatamente o que você está pedindo: serverfault.com/questions/248143/… #
Theuni
stackoverflow.com/questions/8634109/…
Ciro Santilli deve ser executado

Respostas:

34

Use '&' após um comando para fazer o segundo plano de um processo e 'wait' para esperar que eles terminem. Use '()' ao redor dos comandos se precisar criar um sub-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
Anton Cohen
fonte
Simples, mas eficaz para um primeiro passo. É hackeado rapidamente quando as coisas precisam mudar, como nome do host ou número de repetições. Obrigado.
21418 Chris
6

Eu uso o gnu paralelo para tarefas como esta.

Dennis Kaarsemaker
fonte
4
Você poderia fornecer um exemplo para ligar curlcom gnu parallel?
M13r
Sim, o paralelo parece muito bom e é fácil enviar a mesma solicitação 100 vezes. Mas um exemplo de como usar paralelamente ao envio de 100 solicitações de curvatura diferentes tornaria essa resposta melhor.
рüффп 27/03
0

Aqui está um curlexemplo com xargs:

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

O exemplo acima deve curlcada um dos URLs em paralelo, 10 por vez. O -n 1existe para que xargsapenas use 1 linha do URLS.txtarquivo por curlexecução.

O que cada um dos parâmetros xargs faz:

$ 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.
Charlie Le
fonte