2011-04-09 7 views
10

मेरे पास एक रूबी स्क्रिप्ट है जिसमें से मैं समानांतर में चलाने के लिए 4 रेक कार्यों को लॉन्च करना चाहता हूं।मैं रूबी स्क्रिप्ट से समानांतर में एकाधिक रेक कैसे लॉन्च करूं

मैं यह कैसे कर सकता हूं? मुझे लगता है कि मुझे फोर्क की आवश्यकता होगी और एक प्रक्रिया को अलग करना होगा, लेकिन मुझे सटीक वाक्यविन्यास की आवश्यकता है।

उत्तर

16

यह बेहतर है यदि आप रेक को समांतरता को संभालने देते हैं। आप "मल्टीटास्क" का उपयोग कर ऐसा कर सकते हैं। अंदर Rakefile:

desc "Start everything." 
multitask :start => [ 'mongodb:start', 'haystack:start' ] 

Background and source.

अन्यथा

मानते हुए आप Rakefile बाहर से यह कर रहे हैं, तो आप इस तरह भयंकर कोड इस्तेमाल कर सकते हैं, जैसा कि आप उम्मीद कर सकते हैं जो अपवाद फेंक नहीं होगा, और आसानी से विफल हो सकता है तरीके का एक संख्या में:

require 'rake' 
load 'Rakefile' 

def invoke(name) 
    Thread.new do 
    puts Rake::application[name].invoke 
    end 
end 

invoke :make_coffee 
invoke :boil_eggs 
invoke :empty_trash 

+0

मुझे वास्तव में इसे समाधान के रूप में पसंद नहीं है। यह तब तक ठीक काम करता है जब तक उस विशेष प्रविष्टि बिंदु का उपयोग निर्माण को दूर करने के लिए किया जाता है; हालांकि, सिर्फ एक मृत घोड़े को मारने के लिए ('-j' विकल्प): 'मेक' के साथ मैं अपने इच्छित लक्ष्य का चयन कर सकता हूं (उदाहरण के लिए, सुविधा में से किसी एक को निर्दिष्ट करने के विरोध में किसी विशेष लाइब्रेरी के लिए एक स्पष्ट पथ बनाया जाना चाहिए बिल्ड रखरखाव को लक्षित करता है) ... जब तक मैं '-j' विकल्प की आपूर्ति करता हूं, यह समानांतर में बनाता है। ऐसा लगता है कि यह विशेष समाधान केवल तब तक काम करेगा जब तक आपके पास 'मल्टीटास्क' का उपयोग करने के लिए कुछ भी जगह हो, जहां कहीं भी इसकी आवश्यकता हो सकती है। –

+0

@ ब्रायनवेंडेनबर्ग '- मल्टीटास्क' कमांड लाइन विकल्प देखें, यह ऐसा करता है ताकि सभी कार्यों को मल्टीटास्क के रूप में माना जा सके। –

1

कर एक समान सुविधा है (ताकि ऐसा नहीं करते हैं) (-j) है जो आप की अनुमति देता है समानांतर में कई कार्यों को चलाने के लिए। https://github.com/jimweirich/rake/pull/113

और -j साथ रेक का एक कांटा कार्यान्वित: https://github.com/quix/rake

3

उपयोग https://github.com/grosser/parallel

Parallel.each (

वहाँ एक पुल अनुरोध इस सुविधा रेक में उपलब्ध है के लिए खुला है डेटा,: in_processes => 4) {| x | ruby_function (x)}

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