मैं multiprocessing.Manager() अजगर में के बारे में एक चिंता का विषय यहाँ उदाहरण हैmultiprocessing.Manager() पायथन में कैसे काम करता है?
import multiprocessing
def f(ns):
ns.x *=10
ns.y *= 10
if __name__ == '__main__':
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.x = 1
ns.y = 2
print 'before', ns
p = multiprocessing.Process(target=f, args=(ns,))
p.start()
p.join()
print 'after', ns
है, और उत्पादन है,
before Namespace(x=1, y=2)
after Namespace(x=10, y=20)
अब तक, यह मेरी अपेक्षा के अनुरूप काम किया, तो मैं इस तरह कोड,
import multiprocessing
def f(ns):
ns.x.append(10)
ns.y.append(10)
if __name__ == '__main__':
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.x = []
ns.y = []
print 'before', ns
p = multiprocessing.Process(target=f, args=(ns,))
p.start()
p.join()
print 'after', ns
अब
संशोधित, उत्पादन होता है,
before Namespace(x=[], y=[])
after Namespace(x=[], y=[])
यह मुझे भ्रमित कर दिया गया कि मेरी अपेक्षा के अनुसार सूची क्यों नहीं बदला गया था? क्या हुआ यह जानने में कोई मेरी मदद कर सकता है? अग्रिम में धन्यवाद!
3.6 से शुरू होने से, नेस्टेड ऑब्जेक्ट्स में परिवर्तन स्वचालित रूप से प्रचारित होते हैं। – max
मैंने पाइथन 3.6.4 पर प्रबंधक के साथ नेमस्पेस के भीतर नेस्टेड शब्दकोशों का उपयोग करके कुछ मुद्दों में भाग लिया है। सुनिश्चित करें कि आगे बढ़ने से पहले आपके नेस्टेड ऑब्जेक्ट्स को ठीक से अपडेट किया जा रहा है। मेरे लिए समाधान स्पष्ट रूप से प्रत्येक ऑब्जेक्ट को प्रबंधक ऑब्जेक्ट के रूप में साझा करने के लिए परिभाषित करना था। – Joules