क्या कार्यक्रम में पहले बनाई गई मल्टीप्रोसेसिंग शेयर ऑब्जेक्ट्स के माध्यम से बच्चे की प्रक्रियाओं को जन्म दिया जाता है ?
मेरे पास निम्न सेटअप है:
do_some_processing(filename):
for line in file(filename):
if line.split(',')[0] in big_lookup_object:
# something here
if __name__ == '__main__':
big_lookup_object = marshal.load('file.bin')
pool = Pool(processes=4)
print pool.map(do_some_processing, glob.glob('*.data'))
मैं किसी बड़ी वस्तु को मेमोरी में लोड कर रहा हूं, फिर श्रमिकों का एक पूल बना रहा हूं जिसे उस बड़ी वस्तु का उपयोग करने की आवश्यकता है। बड़े ऑब्जेक्ट को केवल पढ़ने के लिए एक्सेस किया जाता है, मुझे प्रक्रियाओं के बीच इसके संशोधनों को पारित करने की आवश्यकता नहीं है।
मेरा प्रश्न है: क्या बड़ी वस्तु को साझा मेमोरी में लोड किया जाता है, जैसे कि अगर मैं यूनिक्स / सी में एक प्रक्रिया को जन्म देता हूं, या प्रत्येक प्रक्रिया बड़ी वस्तु की अपनी कॉपी को लोड करती है?
अपडेट: आगे स्पष्ट करने के लिए - big_lookup_object एक साझा लुकअप ऑब्जेक्ट है। मुझे इसे अलग करने और इसे अलग से संसाधित करने की आवश्यकता नहीं है। मुझे इसकी एक प्रति रखने की आवश्यकता है। जिस काम के लिए मुझे विभाजित करने की आवश्यकता है वह बहुत सारी अन्य बड़ी फ़ाइलों को पढ़ रहा है और लुकिंग ऑब्जेक्ट के विरुद्ध उन बड़ी फ़ाइलों में आइटम देख रहा है।
आगे का अद्यतन: डेटाबेस एक अच्छा समाधान है, मेमकास्ट एक बेहतर समाधान हो सकता है, और डिस्क (शेल्व या डीबीएम) पर फ़ाइल और भी बेहतर हो सकती है। इस प्रश्न में मुझे विशेष रूप से स्मृति समाधान में रुचि थी। अंतिम समाधान के लिए मैं हडूप का उपयोग करूंगा, लेकिन मैं यह देखना चाहता था कि क्या मेरे पास एक स्थानीय मेमोरी संस्करण भी हो सकता है।
marshal.load
माता-पिता और प्रत्येक बच्चे के लिए (प्रत्येक प्रक्रिया मॉड्यूल आयात करता है) कॉल करेगा ।