Python je pomalý? Možná. Ale nejdřív změřte kde.
cProfile¶
python -m cProfile -s cumulative app.py
snakeviz¶
python -m cProfile -o profile.prof app.py
snakeviz profile.prof
line_profiler¶
@profile
def slow_function(): …
kernprof -l -v script.py¶
memory_profiler¶
python -m memory_profiler script.py
py-spy — sampling bez overhead¶
py-spy record -o profile.svg – python app.py
Optimalizace¶
- Generators místo lists
- dict/set pro lookup
- functools.lru_cache
- numpy pro numeriku
- multiprocessing pro CPU-bound
- asyncio pro I/O-bound
Kdy který nástroj¶
cProfile je výchozí volba pro celkový přehled — ukazuje, kolik času se stráví v každé funkci. snakeviz vizualizuje cProfile data jako interaktivní sunburst diagram. line_profiler je nezbytný pro identifikaci pomalých řádků uvnitř funkce — dekorujte podezřelou funkci @profile a spusťte kernprof.
py-spy je sampling profiler, který se připojí k běžícímu procesu bez restartování a bez overhead. Ideální pro produkční debugging. memory_profiler odhaluje memory leaky a zbytečné alokace — každý řádek funkce ukazuje přírůstek paměti. Pro NumPy/Pandas kód použijte scalene, který rozlišuje mezi Python a C kódem. Klíčová pravidla optimalizace: generators místo list comprehensions pro velké datasety, dict/set pro O(1) lookup místo lineárního hledání v seznamech, a asyncio pro I/O-bound operace.
Workflow¶
cProfile → snakeviz → line_profiler → optimalizace → měření znovu.