2015-12-20 41 views
8

Kodumu% prun kullanarak IPython'da profilleme, işlev zamanının çoğunun çöp toplamada (0.334s vs 0.428 toplam süre) geçirildiğini fark ettim.Çöp Toplama neden bu kadar yavaş?

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) 

Ben işlevini çağırmadan önce ve değerini döndükten sonra çöp toplama etkinleştirme/devre dışı bırakma denedim ama zamanlama hemen hemen aynıdır.

import gc 

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

Bunun neden böyle bir darboğaz olduğunu ve nasıl hızlandıracağını bilen var mı?

Benim Python/Pandalar versiyonları aşağıda listelenmiştir:

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

Ben kodunuzu çok oft çöp üretir sanırım. –

+1

Cevabın "hayır" olduğunu tahmin ediyorum, ancak burada herhangi bir kodu paylaşır mısınız? Aksi halde belki bu gc sorununu gösteren bir şey yazabilirsiniz. : s –

+0

@AndyHayden Hala profil yapıyorum. Darboğaz çok sayıda regresyon sağlayan bir işlev gibi görünüyor. MVE'yi bir araya getirirsem, yazımı düzenlerim. – Alexander

cevap

0

Sen özürlü gc böylece açıkça gc.collect çağıran aslında bir şey olabilir. Muhtemelen ipython bu hüner kullanarak suçlu bulabilirsiniz: Kod import gc yapar sadece

import gc 
import traceback 

old_collect = gc.collect 

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

gc.collect = new_collect 

Not çalıştığını, bu (biz gc modülünü manipüle edilir) from gc import collect ile çalışmaz.

Lütfen bir hata bildirin.

0

Çöp toplama işlemi her şeyi yavaşlatır. Ayrıca, her şeyi daha az hataya açık hale getirir. İşte

bu konuyla ilgili bazı iyi haberler şunlardır:

Python Garbage
Only slow if you use it wrong

+0

heh kaynağına bakın, sadece yavaş diyor ki “TODO: GC bölümünde bir şekilde ne demek istediğini” – kilojoules