2012-09-25 29 views
5

मैं टेम्पलेट से ESX सर्वर पर VMs क्लोन कर रहा हूं। सरलीकृत कोड इस तरह दिखता है:पावरहेल 3.0 - वर्कफ़्लोज़ - समानांतर निष्पादन की सीमा

Workflow Create-VM { 
    $List = 1..500 
    foreach -parallel ($Elem in $List) 
    { 
     # Create VM ... 
     # Configure created VM .. 
    } 
} 

Create-VM 

समांतर निष्पादन वास्तव में सहायक है। दुर्भाग्य से इस मामले में बहुत अच्छी तरह से काम नहीं करता है। बहुत सारे समानांतर अनुरोध उत्पन्न होते हैं। मुझे समान संख्या में समानांतर निष्पादन की संख्या सीमित करने की आवश्यकता है (उदाहरण के लिए 4)।

मैं स्थानीय सत्र कॉन्फ़िगरेशन (सत्र थ्रॉटल लिमिट, मैक्स सत्र PerWorkflow, MaxRunningWorkflows) http://technet.microsoft.com/en-us/library/hh849862.aspx बदलने की कोशिश कर रहा था।

$WWE = New-PSWorkflowExecutionOption -SessionThrottleLimit 4 
Set-PSSessionConfiguration -Name microsoft.powershell.workflow ` 
    -SessionTypeOption $WWE 
Get-PSSessionConfiguration microsoft.powershell.workflow | 
fl SessionThrottleLimit 

प्रश्न

  • कौन सा पैरामीटर (या संयोजन) सत्र विन्यास की मैं आदेश 4 के समानांतर निष्पादन की संख्या को सीमित करने में बदलना चाहिए?
  • क्या कोई अन्य तरीका है कि मैं इसे कैसे प्राप्त कर सकता हूं (उदाहरण के लिए: वर्कफ़्लो निष्पादित करने के लिए अलग-अलग तरीका ...)?

उत्तर

3

एक मामूली समाधान सूची को छोटे हिस्सों में विभाजित करना और समानांतर foreach के लिए इनपुट के रूप में उपयोग करना है। इसलिए की तरह,

Workflow Create-VM { 
    $List = 1..500 
    # Calclulate indexes to get elements 0,3; 4,7; 8,11 and so on 
    # Use the .. operator to extract those elements from $list and pass 
    # 'em to foreach -parallel processing part 
    for($i=0;$i -le $List.Count-4; $i+=4) { 
    foreach -parallel ($Elem in $list[$i..($i+3)]) { 
     # Create VM ... 
     # Configure created VM .. 
    } 
    } 
} 
+0

धन्यवाद, यह अच्छी तरह से काम करता है। – Starspace

9

-throttlelimit N का उपयोग कर एक foreach समानांतर पाश में समानांतर प्रक्रियाओं की संख्या को सीमित करने के लिए एक विकल्प नहीं है। समांतरता को कम करने के लिए यह बहुत अच्छा है, लेकिन यदि आप उच्च संख्या का प्रयास करते हैं तो सिस्टम आपके सभी सॉफ़्टवेयर संस्करणों (YAY! माइक्रोसॉफ्ट स्थिरता) के आधार पर आपको 5 तक सीमित कर सकता है। मैं जानता हूँ कि सवाल पुराना है, लेकिन जब से यह एक सभ्य जवाब के बिना गूगल पर आया था, मैंने सोचा कि मैं में झंकार चाहते हैं।

Workflow Create-VM { 
    $List = 1..500 
    foreach -parallel -throttlelimit 4 ($Elem in $List) 
    { 
     # Create VM ... 
     # Configure created VM .. 
    } 
} 

Create-VM 
0

बस इस विस्तार जोड़ना चाहते थे, ThrottleLimit स्विच जैसा कि ऊपर उल्लेख Powershell v4 में उपलब्ध है .0, यह v3.0 में उपलब्ध नहीं है। हमारे पास 2.0 और 3.0 सर्वर का मिश्रण है

+0

v3 विशेष रूप से खराब है, क्योंकि इसकी 5 कार्यप्रवाहों की सीमा है, फिर भी उनमें से कोई भी तब तक पुन: उपयोग नहीं करेगा जब तक कि वे सभी * पूरा नहीं हो जाते। तो यह वास्तव में केवल 5 के बैचों में चलता है। AFAIK यह वही सीमा v4 में मौजूद नहीं है। tl; डॉ शायद v3 में वर्कफ़्लो का उपयोग नहीं करते हैं। –