2012-10-16 15 views
9

में विभिन्न श्रमिकों में समान उत्पादन मेरे पास बहुत ही सरल मामले हैं जहां काम करने के लिए कर्मचारियों को तोड़ा जा सकता है और वितरित किया जा सकता है।मल्टीप्रोसेसिंग

Input : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
0 7 
1 7 
2 7 
5 7 
3 7 
4 7 
6 7 
7 7 
8 6 
9 6 
Pool : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 

ही यादृच्छिक संख्या क्यों मुद्रित हो रही है:

import multiprocessing 
import numpy as np 
import time 

def do_calculation(data): 
    rand=np.random.randint(10) 
    print data, rand 
    time.sleep(rand) 
    return data * 2 

if __name__ == '__main__': 
    pool_size = multiprocessing.cpu_count() * 2 
    pool = multiprocessing.Pool(processes=pool_size) 

    inputs = list(range(10)) 
    print 'Input :', inputs 

    pool_outputs = pool.map(do_calculation, inputs) 
    print 'Pool :', pool_outputs 

उपरोक्त कार्यक्रम निम्नलिखित उत्पादन का उत्पादन: मैं here से एक बहुत ही सरल बहु उदाहरण की कोशिश की? (मेरे पास मेरी मशीन में 4 सीपीयू है)। क्या यह आगे बढ़ने का सबसे अच्छा/सरल तरीका है?

+0

[प्रत्येक प्रक्रिया के लिए अलग यादृच्छिक बीज के साथ का उपयोग करते हुए अजगर बहु] (के संभावित डुप्लिकेट http://stackoverflow.com/questions/9209078/using-python-multiprocessing-with-different- यादृच्छिक-बीज-प्रत्येक-प्रक्रिया के लिए) –

+0

क्या यादृच्छिक संख्याओं का उपयोग करने वाली प्रत्येक प्रक्रिया के लिए यादृच्छिक संख्या सेट करने का कोई तरीका नहीं है? मान लें कि मॉड्यूल यादृच्छिक, numpy, scipy, tensorflow का उपयोग करता है और कौन जानता है और क्या। यह सुनिश्चित करने का एकमात्र तरीका है कि प्रक्रिया में से प्रत्येक के माध्यम से जाने के लिए एक अलग यादृच्छिक बीज है और मैन्युअल रूप से राज्य सेट करें? –

उत्तर

12

मुझे लगता है कि आपको अपने do_calculation फ़ंक्शन में numpy.random.seed का उपयोग करके यादृच्छिक संख्या जनरेटर को फिर से बीज करने की आवश्यकता होगी।

मेरा अनुमान है कि जब आप मॉड्यूल आयात करते हैं तो यादृच्छिक संख्या जनरेटर (आरएनजी) बीजित हो जाता है। फिर, जब आप मल्टीप्रोसेसिंग का उपयोग करते हैं, तो आप आरएनजी के साथ पहले से ही बीएनजी के साथ वर्तमान प्रक्रिया को फोर्क करते हैं - इस प्रकार, आपकी सभी प्रक्रियाएं आरएनजी के लिए समान बीज मूल्य साझा कर रही हैं और इसलिए वे संख्याओं के समान अनुक्रम उत्पन्न करेंगे।

जैसे:

def do_calculation(data): 
    np.random.seed() 
    rand=np.random.randint(10) 
    print data, rand 
    return data * 2 
+0

क्या आप मुझे दिखा सकते हैं कि 'do'' को 'do_calculation' में कैसे रखा जाए। अगर मैं 'मुख्य' में 'बीज' डालता हूं तो मुझे अभी भी समान उत्पादन मिलता है। – imsc

+0

@imsc - क्षमा करें, मैंने सावधानीपूर्वक पर्याप्त नहीं पढ़ा। आप 'np.random.seed' चाहते हैं (' random.seed' नहीं)। मैंने तदनुसार अद्यतन किया है। – mgilson

+0

मुझे अभी भी इसी तरह का परिणाम मिलता है। – imsc

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