Thực hiện các yêu cầu curl song song trong bash


23

Cách tốt nhất để thực hiện 5 curlyêu cầu paralleltừ một tập lệnh bash là gì? Tôi không thể chạy chúng nối tiếp vì lý do hiệu suất.


1
Bạn đã thử tìm kiếm các phần của giải pháp của bạn? Một câu hỏi khác của SF dường như chính xác là những gì bạn đang yêu cầu: serverfault.com/questions/248143/
Khăn

Câu trả lời:


34

Sử dụng '&' sau một lệnh để làm nền cho một quá trình và 'chờ' để chờ chúng kết thúc. Sử dụng '()' xung quanh các lệnh nếu bạn cần tạo lớp vỏ phụ.

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

Đơn giản, nhưng hiệu quả cho bước đầu tiên. Nhanh chóng bị hack khi mọi thứ cần thay đổi, như tên máy chủ hoặc số lần lặp lại. Cảm ơn.
Chris


6

Tôi sử dụng gnu song song cho các nhiệm vụ như thế này.


4
Bạn có thể cung cấp một ví dụ để gọi curlvới gnu parallel?
m13r

Có, song song có vẻ rất tốt và thật dễ dàng để gửi cùng một yêu cầu 100 lần. Nhưng một ví dụ về cách sử dụng song song với việc gửi 100 yêu cầu curl khác nhau sẽ giúp câu trả lời này tốt hơn.
рüффп


0

Đây là một curlví dụ với xargs:

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

Ví dụ trên nên curlmỗi URL song song, 10 URL cùng một lúc. Có -n 1ở đó để xargschỉ sử dụng 1 dòng từ URLS.txttệp cho mỗi lần curlthực hiện.

Mỗi tham số xargs làm gì:

$ 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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.