cPickle.load() in python consumes a large memory -
मेरे पास एक बड़ा शब्दकोश है जिसका संरचना दिखता है:
dcPaths = {'id_jola_001' : CPath उदाहरण} जहां सीपीथ स्वयं परिभाषित वर्ग है:
वर्ग सीपीथ (ऑब्जेक्ट): def __init __ (स्वयं): # कुछ विशेषताएँ स्वयं .m_dAvgSpeed = 0.0 ... # सीएनडोड की सूची self.m_lsNodes = [] की सूची जहां m_lsNodes सीएनड की एक सूची है:
वर्ग सीएनडी (ऑब्जेक्ट): def __init __ (स्वयं): # कुछ गुण self.m_nLoc = 0 # एप्लिकेशन की एक सूची self.m_lsApps = [] यहां, m_lsApps CApp की एक सूची है, जो एक अन्य स्व-परिभाषित वर्ग है:
वर्ग CApp (ऑब्जेक्ट): def __init __ (स्व): # कुछ विशेषताएँ स्वयं। M_nCount = 0 self.m_nUpPackets = 0 मैं cPickle का उपयोग करके इस शब्दकोश को सीरियल कर सकता हूं:
डीआरफ़ सीरियललाइज़ 2 फ़ाइल (स्ट्रफाइलनाम, स्ट्रॉओटीडीआईआर, ओबीजी): अगर लैन (ओबीजे)! = 0: strOutFilePath = "% s% s"% ( strOutDir, strFileName) खुले (strOutFilePath, 'w') के रूप में होटफ़ाइल के रूप में: cPickle.dump (obj , hOutFile, प्रोटोकॉल = 0) वापसी strOutFilePath अन्य: प्रिंट ("serialize करने के लिए कुछ भी नहीं!") यह ठीक काम करता है और धारावाहिक फ़ाइल का आकार लगभग 6.8GB है हालांकि, जब मैं इस ऑब्जेक्ट को डिसेरीलाइज़ करने का प्रयास करता हूं:
def deserializeFromFile (strFilePath): obj = 0 खुले (strFilePath) के साथ hFile: obj = cPickle.load (hFile) वापस obj मुझे लगता है कि यह 90 जीबी से अधिक स्मृति का सेवन करता है और एक लंबा समय लगता है।
- ऐसा क्यों होता है?
- क्या मैं इसे अनुकूलित कर सकता हूं?
बीटीडब्ल्यू, मैं अजगर 2.7.6 का उपयोग कर रहा हूं
आप स्टाक्ल प्रोटोकॉल निर्दिष्ट करने का प्रयास कर सकते हैं; सबसे तेज़ -1 है अर्थात्: नवीनतम प्रोटोकॉल, यदि आप एक ही पायथन संस्करण के साथ नमकीन बनाना और अनप्लिकिंग कर रहे हैं तो कोई समस्या नहीं)।
cPickle.dump (obj, file, protocol = -1) संपादित करें : जैसा कि टिप्पणियों में कहा गया है: लोड प्रोटोकॉल को स्वयं का पता लगाता है। cPickle.load (obj, फ़ाइल)
Comments
Post a Comment