ดำเนินการร้องขอ curl แบบขนานใน bash


23

เป็นวิธีที่ดีที่สุดในการรัน 5 curlคำขอparallelจากสคริปต์ทุบตีอะไร ฉันไม่สามารถรันมันเป็นอนุกรมได้เนื่องจากเหตุผลด้านประสิทธิภาพ


1
คุณลองค้นหาบางส่วนของโซลูชันของคุณหรือไม่ คำถาม SF อีกข้อหนึ่งดูเหมือนจะเป็นสิ่งที่คุณต้องการอย่างแน่นอน: serverfault.com/questions/248143/…
Theuni

คำตอบ:


34

ใช้ '&' หลังคำสั่งเพื่อทำให้กระบวนการเป็นพื้นหลังและ 'รอ' เพื่อรอให้กระบวนการเสร็จสิ้น ใช้ '()' รอบคำสั่งหากคุณต้องการสร้างเชลล์ย่อย

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

เรียบง่าย แต่มีประสิทธิภาพสำหรับขั้นตอนแรก ได้รับการแฮ็กอย่างรวดเร็วเมื่อสิ่งต่าง ๆ จำเป็นต้องเปลี่ยนเช่นชื่อโฮสต์หรือจำนวนการทำซ้ำ ขอบคุณ
Chris


6

ฉันใช้gnu parallelสำหรับงานแบบนี้


4
คุณสามารถให้ตัวอย่างสำหรับการโทรcurlด้วยgnu parallelหรือไม่
m13r

ใช่ขนานดูเหมือนดีมากและง่ายต่อการส่งคำขอเดียวกัน 100 ครั้ง แต่ตัวอย่างเกี่ยวกับวิธีใช้ขนานกับการส่งคำร้องขอ 100 curl ที่แตกต่างกันจะทำให้คำตอบนี้ดีขึ้น
рüффп

1
ตัวอย่างเช่น: gist.github.com/CMCDragonkai/5914e02df62137e47f32
mirrorw

0

นี่คือcurlตัวอย่างของxargs:

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

ตัวอย่างข้างต้นควรcurlURL แต่ละอันขนานกันทีละ 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.