2012-06-26 25 views
12

संभव डुप्लिकेट बहु:
Python multiprocessing global variable updates not returned to parentवैश्विक चर और अजगर

मैं कई कोर के साथ एक कंप्यूटर का उपयोग कर रहा हूँ और प्रदर्शन लाभ के लिए मैं वास्तव में एक से अधिक प्रयोग करना चाहिए। हालांकि, मैं उलझन में हूँ क्यों कोड की इन बिट्स मैं क्या उम्मीद नहीं करते:

from multiprocessing import Process 

var = range(5) 
def test_func(i): 
    global var 
    var[i] += 1 

if __name__ == '__main__': 
    jobs = [] 
    for i in xrange(5): 
     p = Process(target=test_func,args=(i,)) 
     jobs.append(p) 
     p.start() 

print var 

साथ ही

from multiprocessing import Pool 

var = range(5) 
def test_func(i): 
    global var 
    var[i] += 1 

if __name__ == '__main__': 
    p = Pool() 
    for i in xrange(5): 
     p.apply_async(test_func,[i]) 

print var 

मैं परिणाम [1, 2, 3, 4, 5] होने की उम्मीद है, लेकिन परिणाम [0, 1, 2, 3, 4] है।

प्रक्रियाओं के साथ वैश्विक चर का उपयोग करने में मुझे कुछ सूक्ष्मता होनी चाहिए। क्या यह इस तरह से एक चर बदलने की कोशिश करने से बचने का तरीका भी है?

+0

देखो http://stackoverflow.com/questions/659865/python-multiprocessing-sharing-a-large-read-only-object-between-processes – 8bitwide

+0

आप से ये कोड स्निपेट चला रहे हैं एक स्क्रिप्ट, या एक पायथन कंसोल के अंदर निष्पादन? –

+1

आपको एक मल्टीप्रोसेसिंग प्रबंधक के साथ अपनी सूची का प्रबंधन करना चाहिए। – mgilson

उत्तर

9

यदि आप दो अलग-अलग प्रक्रियाएं चला रहे हैं, तो वे समान ग्लोबल्स साझा नहीं करेंगे। यदि आप प्रक्रियाओं के बीच डेटा पास करना चाहते हैं, तो भेजें और recv का उपयोग करके देखें। उदाहरण के लिए http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes पर एक नज़र डालें जो आप कर रहे हैं। इस सवाल पर

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