बैश स्क्रिप्ट से 5 curl
अनुरोधों को निष्पादित करने का सबसे अच्छा तरीका क्या है parallel
? मैं प्रदर्शन कारणों से उन्हें धारावाहिक में नहीं चला सकता।
बैश स्क्रिप्ट से 5 curl
अनुरोधों को निष्पादित करने का सबसे अच्छा तरीका क्या है parallel
? मैं प्रदर्शन कारणों से उन्हें धारावाहिक में नहीं चला सकता।
जवाबों:
एक प्रक्रिया की पृष्ठभूमि के लिए एक आदेश के बाद 'और' का उपयोग करें, और उनके समाप्त होने के लिए प्रतीक्षा करने के लिए 'प्रतीक्षा करें'। यदि आपको उप-शेल बनाने की आवश्यकता है, तो कमांड के चारों ओर '()' का उपयोग करें।
#!/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
समानांतर में प्रक्रियाओं को चलाने के लिए 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-wat-wget
मैं इस तरह के कार्यों के लिए ग्नू समानांतर का उपयोग करता हूं ।
curl
करने के लिए एक उदाहरण प्रदान कर सकते हैं gnu parallel
?
यहाँ एक curl
उदाहरण है xargs
:
$ cat URLS.txt | xargs -P 10 -n 1 curl
उपरोक्त उदाहरण को curl
एक समय में 10 के समानांतर, प्रत्येक URL में होना चाहिए । ऐसा -n 1
है कि xargs
केवल निष्पादन के लिए URLS.txt
फ़ाइल से 1 पंक्ति का उपयोग करता है 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.