अद्यतन में बड़ी संख्यात्मक सरणी की स्मृति जारी करना अद्यतन: - यह समस्या मशीन रीबूट के बाद स्वयं हल हो गई। अभी तक यह पता लगाने में सक्षम नहीं है कि यह त्रुटि पहले क्यों हो रही थी।आईपीथॉन
मेरे पास एक ऐसा फ़ंक्शन है जो एक विशाल numpy सरणी (~ 980MB) लोड करता है और इसे वापस करता है।
जब मैं पहली बार आईपीथॉन शुरू करता हूं और इस फ़ंक्शन को कॉल करता हूं, तो यह किसी भी समस्या के बिना सरणी को सरणी में लोड करता है।
लेकिन यदि मैं एक ही आदेश फिर से चलाता हूं, तो यह "मेमोरी त्रुटि" को बढ़ाता है।
मैं निम्नलिखित की कोशिश की,
del hugeArray
अब भी वही त्रुटि होने वाली किया गया था। मैं भी निम्नलिखित
del hugeArray
gc.collect()
gc.collect()
शुरू करने की कोशिश की, gc.collect()
145 लौट आए और दूसरी कॉल 48. लौटे लेकिन इस के बाद भी जब मैं फ़ंक्शन को कॉल करें, यह अभी भी एक मेमोरी त्रुटि को ऊपर उठाने की गई थी।
एकमात्र तरीका जिसे मैं फिर से लोड कर सकता था ipython को पुनरारंभ करना था। क्या आईपीथॉन में सभी मेमोरी को मुक्त करने के लिए मैं कुछ कर सकता हूं, ताकि मुझे इसे पुनरारंभ करने की आवश्यकता न हो?
---------------- अद्यतन
बाद %whos
Variable Type Data/Info
------------------------------
gc module <module 'gc' (built-in)>
gr module <module 'Generate4mRamp' <...>rom 'Generate4mRamp.pyc'>
np module <module 'numpy' from '/us<...>ages/numpy/__init__.pyc'>
plt module <module 'matplotlib.pyplo<...>s/matplotlib/pyplot.pyc'>
इसमें से के उत्पादन में है, जीआर मेरी समारोह युक्त मॉड्यूल है जो मैं डेटा घन लोड करने के लिए प्रयोग किया जाता था।
--------- त्रुटि
निम्नलिखित सरल समारोह त्रुटि पुन: पेश करने में सक्षम है पुन कैसे।
import numpy as np
import gc
def functionH():
cube=np.zeros((200,1024,1024))
return cube
testcube=functionH() #Runs without any issue
del testcube
testcube=functionH() # Raises Memory Error
del testcube
gc.collect()
gc.collect()
testcube=functionH() # Still Raises Memory Error
यह त्रुटि केवल Ipython में होती है। del testcube
देने के बाद सरल पायथन (>>>) में, कोई मेमोरी त्रुटि नहीं है।
क्या आप मेमोरी ले रहा है यह जानने के लिए ipython में 'whos' को कॉल करने का प्रयास कर सकते हैं? – tiago
@tiago: मैंने% whos कमांड का आउटपुट जोड़ा है। यह लोड किए गए मॉड्यूल के अलावा कोई भी चीज़ नहीं दिखाता है। – indiajoe
क्या आप इसे हटाने से पहले ऑब्जेक्ट की संदर्भ संख्या दिखा सकते हैं? 'आयात sys; sys.getrefcount (testcube)' – HYRY