2016-11-21 11 views
6

में टेक्स्ट और प्रक्रिया को विभाजित करें मेरे पास एक ऐसा प्रोग्राम है जो आउटपुट के बहुत सारे (टेराबाइट्स) उत्पन्न करता है और इसे stdout पर भेजता है।समांतर

मैं उस आउटपुट को विभाजित करना चाहता हूं और इसे किसी अन्य प्रोग्राम के उदाहरणों के समूह के साथ समानांतर में संसाधित करना चाहता हूं। इसे किसी भी तरह से वितरित किया जा सकता है, जब तक लाइनों को बरकरार रखा जाए।

समानांतर ऐसा कर सकते हैं, लेकिन यह लाइनों की एक निश्चित संख्या लेता है और इस के बाद फिल्टर प्रक्रिया restartes:

./relgen | parallel -l 100000 -j 32 --spreadstdin ./filter 

वहाँ उन के बीच चल रहे प्रक्रियाओं की एक स्थिर संख्या रखने के लिए और डेटा वितरित करने के लिए एक तरीका है?

उत्तर

2

-l प्रदर्शन के लिए अच्छा नहीं है। यदि संभव हो तो --block का उपयोग करें।

आपके पास डेटा वितरित राउंडरोबिन हो सकता है: --roundrobin

./relgen | parallel --block 3M --round-robin -j 32 --pipe ./filter 
+0

इस कमांड का उपयोग करके फ़िल्टर-प्रक्रियाएं उत्पन्न होती हैं, लेकिन एक समय में केवल एक ही चल रहा है। अन्य इनपुट के लिए इंतजार कर रहे हैं। – Craden

+0

फिर रिलेजन बहुत धीरे-धीरे उत्पन्न करता है: निचला 3 एम से 0.3 एम –

+0

रिलेजन सभी 32 फ़िल्टर उदाहरणों को चलाने के लिए पर्याप्त तेज़ उत्पन्न कर रहा है। 0.3 एम के साथ अभी भी वही व्यवहार। – Craden