################ Python Profiling ################ :Date: 2013-03-15 :Speaker: Amjith Ramanujam What is it? =========== + This is nothing like racial profiling + All about measuring performance cProfile ======== + The jam, part of the standard library + ``python -m cProfile lcm.py`` + Dump to a .pstats file GUI Profiler: RunSnakeRun ------------------------- + Makes pretty square maps of stuff + Sort by column, drill down, awesome. Tips ---- + Huge overhead + "Don't run in production!" + Slow + Not realistic Targeted Profiling ================== + Critical functions + Start profiler, profile critical thing, stop profiler + ``from profile_func import profile_func``:: @profile_func def lcm(arg1, arg2): # ... + You don't want to affect your critical function! + Pros: less overhead, finer resolution + Cons: still slow, manual, littering code w/ decorators New Relic --------- + Targeted, hybrid profiling + Web apps only :/ + (They don't use cProfile) + Targeted profiling: - Web frameworks (django, etc) - View handlers - SQL calls - Monkey patch calls you care about Hybrid profiling ================ + Top-level function only + Timing data + Capture args + Waterfall diagram/graphing + Pros: fast, function args + Cons: semi-manual, limited instrumentation Statistical Profiling ===================== + Non-deterministic + Kind of like overly-attached girlfriend + Interrupt, inquire, collate = OVERLY ATTACHED - Who are you with - Where are you - When are you coming home? - I miss you! + Interrupt (timer): - UNIX signals - Threads + Inquire (trace) - Stack frame of every thread - import sys, traceback * frames = sys._current_frames() * traceback.extract_stack(frame) + 3rd party libs - StatProf (UNIX signals, CLI) - PLOP (Unix Signals, D3 Call Graph), by DropBox * Size of the bubble indicates CPU time - New Relic (threads, GUI) X-Ray Sessions ============== + New Relic SECRET BETA (until now) + Deterministic + Targeted transactions (e.g. checkout page), count, gather, profile threads + Measure/graph the response & throughput + PROFILE ALL THE THINGS