2015-12-20 11 views
8

% prun का उपयोग करके आईपीथन में अपना कोड प्रोफाइलिंग, मैंने देखा है कि अधिकांश कार्य समय कचरा संग्रह (0.334 बनाम 0.428 कुल समय) में खर्च किया जाता है।कचरा संग्रह इतना धीमा क्यों है?

79254 function calls (77408 primitive calls) in 0.428 seconds 

Ordered by: internal time 

ncalls tottime percall cumtime percall filename:lineno(function) 
    5 0.334 0.067 0.334 0.067 {gc.collect} 
15757 0.005 0.000 0.007 0.000 {isinstance} 
    1584 0.002 0.000 0.004 0.000 dtypes.py:68(is_dtype) 

मैं अक्षम करने/समारोह कॉल करने से पहले और इसके मूल्य लौटने के बाद कचरा संग्रहण को सक्षम करने की कोशिश की है, लेकिन समय लगभग समान है।

import gc 

gc.disable() 
x = foo() 
gc.disable() 

क्या किसी को पता है कि यह इतनी बाधा क्यों है और इसे कैसे गति दें?

मेरे अजगर/पांडा संस्करणों नीचे सूचीबद्ध हैं:

Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:57:58) 
Pandas 0.17.1 
+4

मैं अपने कोड एक बहुत बार बार कचरा पैदा करता है लगता है। –

+1

मुझे लगता है कि उत्तर "नहीं" है, लेकिन क्या आप यहां कोई कोड साझा कर सकते हैं? अन्यथा शायद आप कुछ ऐसा लिख ​​सकते हैं जो इस जीसी मुद्दे को प्रदर्शित करता है। : एस –

+0

@ एंडीहेडन मैं अभी भी प्रोफाइलिंग कर रहा हूं। ऐसा लगता है कि बाधा एक ऐसा कार्य है जो बहुत सारे रिग्रेशन चलाता है। अगर मैं एक एमवीई एक साथ रख सकता हूं, तो मैं अपनी पोस्ट संपादित करूंगा। – Alexander

उत्तर

0

आप विकलांग gc तो वहाँ वास्तव में gc.collect स्पष्ट रूप से बुला कुछ हो सकता है। आप संभवतः IPython में इस चाल का उपयोग करके अपराधी को खोजने के कर सकते हैं:

import gc 
import traceback 

old_collect = gc.collect 

def new_collect(*args, **kwargs): 
    traceback.print_stack() 
    old_collect(*args, **kwargs) 

gc.collect = new_collect 

नोट यह केवल तभी कारगर साबित कोड import gc करता है, यह from gc import collect साथ काम नहीं करता है (हम जी सी मॉड्यूल जोड़ तोड़ कर रहे हैं)।

कृपया एक बग रिपोर्ट यदि आप पता लगाना।

0

कचरा संग्रहण सब कुछ धीमा हो जाता है। यह सबकुछ बहुत कम त्रुटि-प्रवण बनाता है।

यहाँ इस खास विषय से संबंधित कुछ अच्छे लेख हैं:

Python Garbage
Only slow if you use it wrong

+0

हे के लिए स्रोत देखें, केवल धीमा कहता है' TODO: जीसी अनुभाग में उसका अर्थ क्या है – kilojoules

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