Profilowanie mojego kodu w IPython przy użyciu% prun, zauważyłem, że większość czasu funkcji spędza się w garbage collection (0,343 s vs. 0,428 całkowity czas).Dlaczego pobieranie śmieci jest tak wolne?
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)
Próbowałem wyłączenia/włączenia zbieranie śmieci przed wywołaniem funkcji i po powrocie jego wartość, ale termin jest praktycznie identyczny.
import gc
gc.disable()
x = foo()
gc.disable()
Czy ktoś wie, dlaczego jest to wąskie gardło i jak je przyspieszyć?
wersje My Python/Pandy są wymienione poniżej:
Python 2.7.11 |Continuum Analytics, Inc.| (default, Dec 6 2015, 18:57:58)
Pandas 0.17.1
Chyba kod produkuje dużo oft śmieci. –
Domyślam się, że odpowiedź brzmi "nie", ale czy możesz tutaj udostępnić dowolny kod? W przeciwnym razie możesz napisać coś, co demonstruje ten problem z gc. : s –
@AndyHayden Nadal tworzę profil. Wygląda na to, że wąskie gardło to funkcja, która uruchamia wiele regresji. Jeśli mogę utworzyć MVE, będę edytować mój post. – Alexander