2017-03-02 11 views
5

मैं एक अजगर PyPy के साथ (2.7) स्क्रिप्ट चलाने के लिए कोशिश कर रहा हूँ, लेकिन मैं निम्नलिखित त्रुटि का सामना करना पड़ा:क्या Pypy में sys.getsizeof() के लिए कोई विकल्प है?

TypeError: sys.getsizeof() is not implemented on PyPy. 

A memory profiler using this function is most likely to give results 
inconsistent with reality on PyPy. It would be possible to have 
sys.getsizeof() return a number (with enough work), but that may or 
may not represent how much memory the object uses. It doesn't even 
make really sense to ask how much *one* object uses, in isolation 
with the rest of the system. For example, instances have maps, 
which are often shared across many instances; in this case the maps 
would probably be ignored by an implementation of sys.getsizeof(), 
but their overhead is important in some cases if they are many 
instances with unique maps. Conversely, equal strings may share 
their internal string data even if they are different objects---or 
empty containers may share parts of their internals as long as they 
are empty. Even stranger, some lists create objects as you read 
them; if you try to estimate the size in memory of range(10**6) as 
the sum of all items' size, that operation will by itself create one 
million integer objects that never existed in the first place. 

अब, मैं वास्तव में इस कार्यक्रम के निष्पादन के दौरान एक नेस्टेड dict के आकार की जांच की जरूरत है, क्या sys.getsizeof() का कोई विकल्प है जिसका उपयोग मैं पीपीपी में कर सकता हूं? यदि नहीं, तो मैं पीपीपी में नेस्टेड ऑब्जेक्ट के आकार की जांच कैसे करूं?

+0

"मुझे प्रोग्राम के निष्पादन के दौरान वास्तव में एक नेस्टेड dict के आकार की जांच करने की आवश्यकता है" - 'sys.getsizeof' इसके लिए सीपीथन के तहत भी सही उपकरण नहीं होता। यह अन्य ऑब्जेक्ट्स के आकारों पर विचार नहीं करता है, जिसमें किसी ऑब्जेक्ट के संदर्भ होते हैं, जैसे कि dict कुंजी और मान। – user2357112

+0

यह आसान है, आप एक फ़ंक्शन को कार्यान्वित कर सकते हैं जो नेस्टेड dict पर पुनरावृत्ति करता है और पूरे ऑब्जेक्ट के संचयी आकार की गणना करता है। http://stackoverflow.com/questions/449560/how-do-i-determine-the-size-of-an-object-in-python –

+2

मुझे लगता है कि लोग अभी भी 'sys.getsizeof()' '' यहां तक ​​कि यदि पाठ की दीवार और भी विवरण में बताती है कि इसका अर्थ क्यों नहीं है, उदाहरणों के साथ पूरा करें। –

उत्तर

2

वैकल्पिक रूप से आप

import resource 
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss 

का उपयोग कर अपने प्रक्रिया के स्मृति उपयोग आकलन कर सकते हैं अपने कार्यक्रम को क्रियान्वित करने जाता है, getrusage बाइट या किलोबाइट की संख्या में प्रक्रिया की कुल स्मृति की खपत दे देंगे। इस जानकारी का उपयोग करके आप अपने डेटा संरचनाओं का आकार अनुमान लगा सकते हैं, और यदि आप अपनी मशीन की कुल मेमोरी का 50% उपयोग करना शुरू करते हैं, तो आप इसे संभालने के लिए कुछ कर सकते हैं।

+0

यह पूरी प्रक्रिया की स्मृति खपत का प्रबंधन करने का एक तरीका है, लेकिन यह मुझे किसी विशिष्ट वस्तु के लिए आवंटित स्मृति पर जानकारी नहीं देता है। यह मेरे विशिष्ट मामले के लिए काम कर सकता है। धन्यवाद। –

संबंधित मुद्दे