Robocikowo>ROBOCIKOWO

Python — od podstaw do zaawansowanego · Performance i profilowanie

dis i bytecode CPython

Performance i profilowanie

Wprowadzenie

Python to język INTERPRETOWANY, ale nie wykonuje kodu źródłowego linia po linii. Najpierw kompiluje go do BYTECODE-u — sekwencji instrukcji dla wirtualnej maszyny CPython. Dopiero ten bytecode wykonuje pętla ewaluacyjna (_PyEval_EvalFrameDefault w ceval.c).

Moduł dis ze stdlib pozwala podejrzeć ten bytecode. Wpiszesz dis.dis(funkcja) i widzisz instrukcje: LOAD_FAST, BINARY_ADD, CALL_FUNCTION, RETURN_VALUE. To okno na to, co naprawdę robi Python — często wyjaśnia mikrooptymalizacje (czemu lokalne zmienne są szybsze od globalnych, czemu list-comp bije pętlę, czemu += na stringach bywa wolne).

Lekcja pokazuje: jak czytać wynik dis.dis, najważniejsze opcody (LOAD_FAST/LOAD_GLOBAL, BUILD_LIST, JUMP_*, CALL), kompilację do .pyc w __pycache__, peephole-optymalizacje, różnice 3.10 → 3.11 (specjalizacja PEP 659, adaptive interpreter, „inline caches") i jak używać dis do walidacji optymalizacji.