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
Ben kodunuzu çok oft çöp üretir sanırım. –
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 –
@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