Python Profiling

Published on: September 18, 2025

Tags: #python #profiling #performance


General Python Profiling Workflow

graph TD
    A[Start: Slow Application] --> B{Run High-Level Profiler};
    B --> B_CMD["python -m cProfile -o 
stats.pstats my_script.py"]; B_CMD --> C[Generate Stats File]; C --> D{Analyze Results}; D --> D_L1[Visualize with snakeviz]; D_L1 --> D_L2[Interactive Call Graph]; D --> D_R1[Read with pstats]; D_R1 --> D_R2[Sortable Text Report]; D_L2 --> E{Identify Bottleneck Functions}; D_R2 --> E; E --> F{Use a Line-Level Profiler}; F --> G[Decorate function with @profile]; G --> H_CMD["Run kernprof -l -v my_script.py"]; H_CMD --> I[Get Line-by-Line Time Report]; I --> J{Optimize Inefficient Lines}; J --> K[Re-run Profilers to Measure
Improvement]; K --> L[End: Faster Application]; %% Styling for the command nodes to match the image style B_CMD fill:#666,color:#fff,stroke:#fff,stroke-width:1px style H_CMD fill:#666,color:#fff,stroke:#fff,stroke-width:1px

Types of Python Profilers

mindmap
  root((Python Profilers))
    ::icon(fa fa-cogs)
    CPU Profiling
      Deterministic
        ::icon(fa fa-search)
        cProfile (built-in)
        profile (built-in)
      Statistical
        ::icon(fa fa-chart-bar)
        py-spy
        pyinstrument
        austin
    Memory Profiling
      ::icon(fa fa-memory)
      Line-by-Line
        memory_profiler
      Object-Level
        tracemalloc (built-in)
        Pympler

Profiling Tools and Their Outputs

graph LR
    subgraph Input
        A[my_script.py]
    end

    subgraph High-Level Profiling
        B(cProfile)
    end

    subgraph Analysis & Visualization
        C(stats.pstats)
        D(SnakeViz)
        E(pstats module)
        F(flameprof)
    end

    subgraph Line-Level Profiling
        G[my_script.py with @profile]
        H(line_profiler)
        I(memory_profiler)
    end

    subgraph Outputs
        J[Interactive HTML Chart]
        K[Sorted Text Report]
        L[Flame Graph SVG]
        M[Line-by-Line Time Report]
        N[Line-by-Line Memory Report]
    end

    A --> B;
    B --> C;
    C --> D;
    C --> E;
    C --> F;

    D --> J;
    E --> K;
    F --> L;

    G --> H;
    G --> I;

    H --> M;
    I --> N;

    style A fill:#f9f,stroke:#333,stroke-width:2px
    style G fill:#f9f,stroke:#333,stroke-width:2px

Share this post

Share on X  •  Share on LinkedIn  •  Share via Email