2013-01-08 13 views
7

मैं बहु-थ्रेडेड कोड में pandas.DataFrame का उपयोग कर रहा हूं (वास्तव में DataFrame का कस्टम सबक्लास Sound कहा जाता है)। मैंने देखा है कि मेरे पास मेमोरी रिसाव है, क्योंकि मेरे प्रोग्राम की मेमोरी उपयोग धीरे-धीरे 10 एमएन से अधिक हो जाती है, अंततः मेरे कंप्यूटर मेमोरी और क्रैश के ~ 100% तक पहुंच जाती है।पांडा डेटाफ्रेम का उपयोग कर मेमोरी लीक

मैं objgraph इस्तेमाल किया इस रिसाव पर नज़र रखने के प्रयास करने के लिए, और पता चला कि MyDataFrame के उदाहरण की गिनती, जबकि ऐसा नहीं होना चाहिए हर समय ऊपर जा रहा है: अपने run विधि में हर धागा, एक उदाहरण बनाता है कुछ गणना करता है, बचाता है परिणामस्वरूप एक फ़ाइल में निकलता है और बाहर निकलता है ... इसलिए कोई संदर्भ नहीं रखा जाना चाहिए।

objgraph का उपयोग करते हुए मैंने पाया स्मृति में सभी डेटा फ्रेम एक समान संदर्भ ग्राफ है:

enter image description here

मुझे पता नहीं है कि अगर सामान्य है या नहीं ... ऐसा लगता है कि यह क्या बना रहा है स्मृति में मेरी वस्तुओं। कोई विचार, सलाह, अंतर्दृष्टि?

+0

क्या यह दोहराने के लिए एक छोटा कोड स्निपेट शामिल करना संभव है? –

+0

क्या आपने मैन्युअल रूप से कचरा कलेक्टर चलाने की कोशिश की? यदि आपके पास परिपत्र संदर्भ हैं, तो स्मृति को रिलीज़ करने के लिए इसकी आवश्यकता हो सकती है। 'आयात जीसी; gc.collect() ' – lgautier

उत्तर

7

पुष्टि की कि इंडेक्सिंग आधारभूत संरचना में कुछ प्रकार की मेमोरी रिसाव चल रही है। यह उपरोक्त संदर्भ ग्राफ के कारण नहीं है। के GitHub के लिए चर्चा चलते हैं (अतः क्यू & एक के लिए है):

https://github.com/pydata/pandas/issues/2659

संपादित करें: यह वास्तव में सब पर एक स्मृति रिसाव नहीं प्रतीत होता है, लेकिन ओएस स्मृति आवंटन मुद्दों शायद के साथ क्या करना है। कृपया अधिक जानकारी के लिए जिथब मुद्दे पर एक नज़र डालें

+0

ठीक है ... जीसी के साथ मैन्युअल रूप से एकत्र करना वास्तव में चाल चल रहा है। जब मैं इसके बारे में निश्चित हूं तो मैं पुष्टि करूंगा। – sebpiq

+0

ठीक है मैं पुष्टि करता हूं, यह समस्या थी ... धन्यवाद! – sebpiq

+0

क्या कोई कारण है कि पाइथन रनटाइम द्वारा जीन 2 जीसी स्वचालित रूप से नहीं चल रहा था? – Fil