जीएनयू समानांतर मेलिंग सूची के अनुसार यह जीएनयू समानांतर-विशिष्ट समस्या नहीं है। उन्होंने सुझाव दिया कि मैं अपनी समस्या यहाँ पोस्ट करता हूँ।
मुझे जो त्रुटि मिल रही है वह "टूटी हुई पाइप" त्रुटि है, लेकिन मुझे लगता है कि मुझे पहले अपनी समस्या का संदर्भ स्पष्ट करना चाहिए और इस त्रुटि का कारण बनता है। यह तब होता है जब GNU समांतर में 'पढ़े जाते हैं' लूप युक्त किसी बैश स्क्रिप्ट का उपयोग करने की कोशिश की जाती है।
मेरे पास इस तरह से एक मूल बैश स्क्रिप्ट है:
#!/bin/bash
# linkcheck.sh
while read domain
do
host "$domain"
done
मान लें कि मैं एक बड़ी सूची (250mb कहना) में पाइप करना चाहता हूं।
cat urllist | ./linkcheck.sh
250mb लायक URL पर होस्ट कमांड चलाना धीमा है। चीजों को गति देने के लिए, मैं इनपुट को तोड़ने से पहले इसे विखंडू में तोड़ना चाहता हूं और फिर समानांतर में कई काम चलाते हैं। जीएनयू समानांतर ऐसा करने में सक्षम है।
cat urllist | parallel --pipe -j0 parallel ./linkcheck.sh {}
{} को urlist लाइन-बाय-लाइन की सामग्री द्वारा प्रतिस्थापित किया जाता है। मान लें कि मेरा सिस्टम डिफ़ॉल्ट सेटअप समानांतर के प्रति 500ish नौकरियों को चलाने में सक्षम है। इस सीमा को पूरा करने के लिए हम समानांतर खुद को समानांतर कर सकते हैं:
cat urllist | parallel -j10 --pipe parallel -j0 ./linkcheck.sh {}
यह 5000'ish नौकरियां चलाएगा। यह भी, दुख की बात है, त्रुटि "टूटी हुई पाइप" (बैश FAQ) का कारण होगी । फिर भी स्क्रिप्ट तब काम करना शुरू करती है जब मैं पढ़े गए लूप को हटा देता हूं और जो भी {{उदा।
#!/bin/bash
# linkchecker.sh
domain="$1"
host "$1"
कुछ समय के लूप के साथ काम क्यों नहीं करेगा? क्या "टूटी पाइप" संदेश को रोकने के लिए सिगिप सिग्नल को बंद करना सुरक्षित है, या डेटा भ्रष्टाचार जैसे दुष्प्रभाव होंगे?
पढ़ने के लिए धन्यवाद।