मल्टीप्रोसेसिंग: प्रक्रियाओं के बीच एक बड़ी रीड-ओनली ऑब्जेक्ट साझा करना?

| | | | | | | | | | | | | | | | | | | | | | | | |

क्या चाइल्ड प्रोसेस मल्टीप्रोसेसिंग प्रोग्राम में पहले बनाए गए ऑब्जेक्ट को शेयर करते हैं? p>

मेरे पास निम्न सेटअप है:

do_some_processing(filename): लाइन इन फाइल (फाइलनाम) के लिए: if line.split(",")[0] in big_lookup_object: # यहाँ कुछ अगर __name__ == "__main__": big_lookup_object = marshal.load("file.bin") पूल = पूल (प्रक्रियाएँ = 4) प्रिंट पूल। मैप (do_some_processing, glob.glob ("*। डेटा")) 

मैं किसी बड़ी वस्तु को स्मृति में लोड कर रहा हूं, फिर श्रमिकों का एक पूल बना रहा हूं जिसे उस बड़ी वस्तु का उपयोग करने की आवश्यकता है। बड़ी वस्तु को केवल पढ़ने के लिए एक्सेस किया जाता है, मुझे इसकी आवश्यकता नहीं है प्रक्रियाओं के बीच इसके संशोधनों को पास करें।

मेरा प्रश्न है: साझा स्मृति में लोड की गई बड़ी वस्तु है, जैसा कि यह होगा यदि मैंने यूनिक्स/सी में एक प्रक्रिया बनाई है, या प्रत्येक प्रक्रिया अपनी प्रतिलिपि लोड करती है बड़ी वस्तु?

अपडेट: आगे स्पष्ट करने के लिए - big_lookup_object एक साझा लुकअप ऑब्जेक्ट है। मुझे इसे विभाजित करने और इसे अलग से संसाधित करने की आवश्यकता नहीं है। मुझे इसकी एक प्रति रखने की आवश्यकता है। मुझे इसे विभाजित करने के लिए जिस काम की आवश्यकता है वह बहुत सारी अन्य बड़ी फ़ाइलों को पढ़ रहा है और उन बड़ी फ़ाइलों में वस्तुओं को देख रहा है। लुकअप ऑब्जेक्ट।

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