2012-07-14 25 views
11

मेरे पास एक फ़ाइल है जिसमें कमांड लाइनें हैं जिन्हें मैं चलाने के लिए चाहता हूं। इस फ़ाइल में लगभग 2,000 लाइनें हैं।मैं समानांतर में कमांड की सूची कैसे चला सकता हूं?

मेरे पास 8 कोर उपलब्ध हैं। क्या फ़ाइल को पार्स करना और 8 प्रक्रियाओं को शुरू करना संभव है, फिर जब भी प्रोग्राम में से कोई भी समाप्त हो जाता है तो फ़ाइल से किसी अन्य को निष्पादित करना संभव है? मैं इसे जारी रखना चाहता हूं जब तक फ़ाइल के अंत तक नहीं पहुंच जाता।

+0

कृपया देखें [प्रक्रिया प्रबंधन] (http://mywiki.wooledge.org/ProcessManagement)। –

उत्तर

18

आप फ़ाइल में पढ़ने के लिए xargs का उपयोग कर सकते हैं, जबकि उपलब्ध कोर की संख्या को अधिकतम संख्या सीमित कर सकते हैं। उदाहरण के लिए:

cores=$(fgrep -c processor /proc/cpuinfo) 
xargs --arg-file=/tmp/foo \ 
     --max-procs=$cores \ 
     --replace \ 
     --verbose \ 
     /bin/sh -c "{}" 
+1

सबसे अच्छा समाधान –

0

आप & के साथ आदेश चलाकर बस पृष्ठभूमि पर नई प्रक्रियाएं शुरू कर सकते हैं। आपकी समस्या का समाधान वर्णन करने वाला एक उदाहरण here है।

28

GNU parallel का उपयोग करें। यह एक अविश्वसनीय रूप से शक्तिशाली उपकरण है और आधिकारिक पैकेज लगभग 20 या तो लिनक्स डिस्ट्रोज़ के लिए मौजूद हैं। वह क्या है?

jobs.txt की सामग्री::

sleep 1; echo "a" 
sleep 3; echo "b" 
sleep 2; echo "c" 

कमान:

time parallel :::: jobs.txt 

परिणाम:

a 
c 
b 

real 0m3.332s 
user 0m0.170s 
sys  0m0.037s 
You have an excuse as to why you can't use it? यहाँ एक सरल कैसे समानांतर में आदेशों की एक सूची या फ़ाइल को चलाने के दिखा उदाहरण है

नोट्स:

यदि आप ऑर्डर को इनपुट के समान रखना चाहते हैं, तो -k ध्वज जीएनयू समानांतर में पास करें।

यदि आपके पास आठ से अधिक कोर हैं और केवल आठ कोर के साथ प्रक्रिया करना चाहते हैं, तो -j 8 को तर्क सूची में जोड़ें।

man page एक अच्छा पढ़ा गया है, लेकिन यदि आपने पहले ही this tutorial पढ़ा नहीं है तो मैं अत्यधिक समय निवेश की सिफारिश करता हूं।

+0

जीएनयू समांतर उबंटू 11.10 पर उपलब्ध नहीं है, लेकिन यह डेबियन सिड पर उपलब्ध है। यह ध्यान देने योग्य भी है कि यह उदाहरण * * * काम नहीं करेगा जैसा कि ऑटुटिल्स पैकेज से समांतर उपयोगिता के साथ है, जिसमें कुछ अलग अर्थशास्त्र हैं। –

+0

-j 8 की आवश्यकता नहीं है - यह स्वचालित रूप से पता चला है। उबंटू पैकेज: https://build.opensuse.org/package/binaries?package=parallel&project=home%3Atange&repository=xUbuntu_11.10 –

+0

समानांतर में फ़ाइल से कमांड चलाने के लिए आप 'cat/path/to/file कर सकते हैं .txt | parallel' –

संबंधित मुद्दे