का उपयोग करके विशाल शब्दकोश साझा करना मैं मल्टीप्रोसेसिंग का उपयोग करके, शब्दकोश में संग्रहीत बहुत बड़ी मात्रा में डेटा संसाधित कर रहा हूं। असल में मैं जो कुछ कर रहा हूं वह कुछ हस्ताक्षर लोड कर रहा है, जो एक शब्दकोश में संग्रहीत है, इसमें से एक साझा dict ऑब्जेक्ट का निर्माण कर रहा है (प्रबंधक.dict() द्वारा लौटाई गई 'प्रॉक्सी' ऑब्जेक्ट प्राप्त करना) और इस प्रॉक्सी को उस फ़ंक्शन के तर्क के रूप में पास करना मल्टीप्रोसेसिंग में निष्पादित किया जाएगा।पायथन: मल्टीप्रोसेसिंग
बस स्पष्ट करने के लिए:
signatures = dict()
load_signatures(signatures)
[...]
manager = Manager()
signaturesProxy = manager.dict(signatures)
[...]
result = pool.map (myfunction , [ signaturesProxy ]*NUM_CORES)
अब, सब कुछ पूरी तरह से काम करता है अगर हस्ताक्षर 2 लाख से भी कम समय प्रविष्टियों या तो है। वैसे भी, मुझे 5.8 एम कुंजी के साथ एक शब्दकोश को संसाधित करना है (हस्ताक्षर बाइनरी प्रारूप में 4.8 जीबी फ़ाइल उत्पन्न करता है)।
Traceback (most recent call last):
File "matrix.py", line 617, in <module>
signaturesProxy = manager.dict(signatures)
File "/usr/lib/python2.6/multiprocessing/managers.py", line 634, in temp
token, exp = self._create(typeid, *args, **kwds)
File "/usr/lib/python2.6/multiprocessing/managers.py", line 534, in _create
id, exposed = dispatch(conn, None, 'create', (typeid,)+args, kwds)
File "/usr/lib/python2.6/multiprocessing/managers.py", line 79, in dispatch
raise convert_to_error(kind, result)
multiprocessing.managers.RemoteError:
---------------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.6/multiprocessing/managers.py", line 173, in handle_request
request = c.recv()
EOFError
---------------------------------------------------------------------------
मैं जानता हूँ कि डेटा संरचना बहुत बड़ा है, लेकिन मैं एक मशीन पर काम कर रहा हूँ w/32GB रैम सुसज्जित है, और शीर्ष चल रहा है कि देखें: इस मामले में, प्रक्रिया प्रॉक्सी वस्तु के निर्माण के दौरान मर जाता है हस्ताक्षर लोड करने के बाद, प्रक्रिया 7 जीबी रैम पर है। इसके बाद यह प्रॉक्सी ऑब्जेक्ट का निर्माण शुरू करता है और रैम का उपयोग ~ 17 जीबी रैम तक जाता है लेकिन 32 के करीब कभी नहीं मिलता है। इस बिंदु पर, राम उपयोग जल्दी से कम हो जाता है और प्रक्रिया उपर्युक्त त्रुटि से समाप्त हो जाती है। तो मुझे लगता है कि यह आउट-ऑफ-मेमोरी त्रुटि के कारण नहीं है ...
कोई विचार या सुझाव?
, धन्यवाद
डेविड
क्या यह विंडोज 7 के साथ काम करता है (जो निश्चित रूप से एक आधुनिक ओएस है?) –
@ सेन: मुझे नहीं पता; इसका परीक्षण करने का प्रयास करें। मुझे संदेह है कि इसकी प्रक्रिया मॉडल पिछले संस्करणों की तुलना में अधिक आधुनिक है; विंडोज हमेशा इसके बारे में अंधेरे युग में रहा है। –
(यादृच्छिक, गलत डाउनवॉट्स के लिए SO की तरह कुछ नहीं।) –