मैं लूप करते समय इसके लिए जीएनयू समानांतर का उपयोग कैसे करूंगा?


12

इसलिए मेरे पास कुछ समय है:

cat live_hosts | while read host; do \
    sortstuff.sh -a "$host" > sortedstuff-"$host"; done

लेकिन इसमें लंबा समय लग सकता है। मैं लूप करते समय इसके लिए जीएनयू समानांतर का उपयोग कैसे करूंगा?

जवाबों:


13

आप एक समय लूप का उपयोग नहीं करते।

parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts

ध्यान दें कि यह आपके live_hosts(जैसे /some/dir/file) पथ के रूप में काम नहीं करेगा क्योंकि इसका विस्तार sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file(जिसके परिणामस्वरूप no such file or directory) होगा; उन मामलों के लिए उपयोग करें {//}और {/}( विवरण के लिए gnu-parallelमैनुअल देखें):

parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts

यह उपयोग करना संभव है teeके साथ parallelजब में उत्पादन डाल sortedstuff? इसलिए मैं आउटपुट को देख सकता हूं क्योंकि यह चलता है।
सर्वहारा

1
@Proletariat - आप टर्मिनल पर भी आउटपुट करना चाहते हैं? बस की जगह >के साथ | teeजैसे पहले आदेश हो जाता है parallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
don_crissti

3

एक पुराने स्कूल के रूप में "एक काम करो और इसे अच्छी तरह से करो" यूनिक्स आदमी, मैं स्ट्रिंग प्रतिस्थापन सामान को एक रैपर स्क्रिप्ट में डालूंगा:

#!/bin/sh
sortstuff.sh -a "$1" > sortedstuff-"$1"

यदि आप इसे कहते हैं wrapper.sh, तो parallelइसे कॉल करने का आदेश होगा:

parallel wrapper.sh < live_hosts

ध्यान दें कि आपको catइस तरह की चीज़ की आवश्यकता नहीं है, जो एक बाहरी कार्यक्रम आह्वान को बचाता है।


2

आप की जरूरत नहीं है parallel , क्योंकि पाश का शरीर पिछले पुनरावृत्तियों पर निर्भर नहीं करता है। बस प्रत्येक होस्ट के लिए एक नई पृष्ठभूमि प्रक्रिया शुरू करें।

while read host; do
    sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait    # Optional, to block until the background tasks are done

parallelहालांकि कुछ पहलुओं को प्रबंधित करना आसान बनाता है; आप समानांतर में चलने वाली नौकरियों की संख्या को अधिक आसानी से सीमित कर सकते हैं।


3
यदि wc -l live_hostsडिस्क स्पिंडल या सीपीयू कोर की संख्या से अधिक है - इस पर निर्भर करता है कि कार्य I / O या CPU-बाउंड है - तो आप इस तरह के समाधान के साथ समानता से मिलने वाले लाभ को खा सकते हैं। parallelनौकरियों की संख्या को सीमित करने की क्षमता सिर्फ अच्छी नहीं है, यह निकट-आवश्यक है, यदि प्रसंस्करण गति आपका लक्ष्य है।
वॉरेन यंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.