2013-05-08 9 views
8

Czy istnieje sposób na odczytanie, ile instrukcji maszyny wirtualnej Python zostało zinterpretowanych od czasu uruchomienia maszyny wirtualnej? Zdaję sobie sprawę, że może to (jeśli w ogóle możliwe) dotyczy tylko CPython.Przeczytaj, ile instrukcji Pythona zostało zinterpretowanych?

+2

Co masz na myśli przez instrukcji? Linie kodu? Wywołania funkcji? To jest język wysokiego poziomu, a nie asembler. –

+2

@ JarosławJaryszew: Zgaduję instrukcje VM. Pamiętam profilowanie programów Prolog przez liczenie takich instrukcji, co było bardzo przydatne. –

+3

(Warto zauważyć, że wyszukiwanie w Google "instrukcji cpython count pojawia się na czwartej pozycji: http://en.wikipedia.org/wiki/Holy_Hand_Grenade_of_Antioch) –

Odpowiedz

1

Niełatwo. Kanonicznym sposobem mierzenia wydajności jest użycie one of the profiling modules available. Nadal ...

W CPython 2, możliwe jest uzyskanie przybliżonego pomiaru dla bieżącego wątku z modułu rozszerzającego (to znaczy kodu C) przez odczytanie struktury PyThreadState. Istnieje pole o nazwie tick_counter, które po pomnożeniu przez przedział kontrolny powoduje liczbę wykonanych instrukcji kodu bajtowego. Lub, innymi słowy, liczba iteracji głównej pętli interpretera.

Jednak podczas interwału sprawdzenia może się zmienić ta wartość nie jest dokładna.

Interesujące linki do CPython 2.7.4:

Od CPython 3.2 podaje tick_counter stracił swój prawdziwy sens, więc” ponownie zmuszony do użycia śledzenia lub profilowanie już wspomniano:

+0

Czy liczba instrukcji kodu bajtowego może się zmniejszyć zgodnie z tą techniką? –

+0

Myślę, że to zależy od platforma (kompilator + kombinacja arquitecture) Ponieważ 'tick_counter' zwiększa się tylko w bardzo długich programach, przepełni się i najprawdopodobniej zawinie, a ponieważ jest to liczba całkowita ze znakiem, to ostatecznie stanie się ujemne. – C2H5OH

Powiązane problemy