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?
Odpowiedz
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:
- http://hg.python.org/cpython/file/026ee0057e2d/Include/pystate.h#l83
- http://hg.python.org/cpython/file/026ee0057e2d/Python/ceval.c#l977
- http://docs.python.org/2.7/library/sys.html#sys.setcheckinterval
- http://docs.python.org/2.7/c-api/init.html#PyThreadState_Get
Od CPython 3.2 podaje tick_counter
stracił swój prawdziwy sens, więc” ponownie zmuszony do użycia śledzenia lub profilowanie już wspomniano:
Czy liczba instrukcji kodu bajtowego może się zmniejszyć zgodnie z tą techniką? –
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
- 1. PHP - ile dni zostało godzin od daty
- 2. Ile kombinacji W tej instrukcji jeśli
- 3. Przeczytaj konfigurację selera z pliku właściwości Pythona
- 4. 10 żądań klientów dla serwletu. Ile instancji serwletu zostało utworzonych?
- 5. MySQL - ile wierszy mogę wstawić w jednej instrukcji INSERT?
- 6. Czy potrzebuję instrukcji return po wyjątku Pythona?
- 7. Przeczytaj archiwum wiadomości skype
- 8. Przeczytaj wyjście mongodump z go i mgo
- 9. Przeczytaj plik json z python
- 10. Ile czasu zajmuje Glibc na kompilację?
- 11. System.Net.WebException: żądanie zostało przerwane: żądanie zostało anulowane
- 12. Dekompresuj i przeczytaj pliki kleszczy Dukascopy .bi5
- 13. Jak mogę znaleźć metody Pythona bez instrukcji return?
- 14. Dlaczego forma Pythona "z" instrukcji import może wiązać nazwę modułu?
- 15. jak wyjść ze skryptu Pythona w instrukcji if
- 16. Jaki jest odpowiednik w PHP dla instrukcji pass Pythona?
- 17. Iterowanie XML z lxml w Pythonie: jak sprawdzić, ile danych wejściowych zostało przeczytanych?
- 18. Przeczytaj treść instrukcji POST HTTPServletRequest, a następnie wywołaj metodę getParameter w Tomcat.
- 19. Przeczytaj klucz rejestru
- 20. HTML5 - przeczytaj schowek?
- 21. Przeczytaj pierwsze bajty pliku
- 22. Przeczytaj puste wiersze C++
- 23. Przeczytaj doctype z JavaScriptem
- 24. Przeczytaj metadane pliku mp3
- 25. Przeczytaj stan "Włączony" przycisku:
- 26. przeczytaj nazwę nieznanych właściwości
- 27. Przeczytaj pełną nazwę sscanf
- 28. Przeczytaj UIApplicationLaunchOptionsURLKey w Swift
- 29. przeczytaj application.conf z build.sbt
- 30. Przeczytaj XElement z XmlReadera
Co masz na myśli przez instrukcji? Linie kodu? Wywołania funkcji? To jest język wysokiego poziomu, a nie asembler. –
@ JarosławJaryszew: Zgaduję instrukcje VM. Pamiętam profilowanie programów Prolog przez liczenie takich instrukcji, co było bardzo przydatne. –
(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) –