Pyinstrument

Profiling Python code with Pyinstrument

Python
from pyinstrument import Profiler
import time

# Start profiling using a context manager
with Profiler() as profiler:

    # Define a series of nested function calls
    def main_function():
        first_function()
        second_function()

    def first_function():
        helper_function()

    def second_function():
        helper_function()

    def helper_function():
        final_function()

    def final_function():
        # Simulate some delay
        time.sleep(0.1)

    # Call the main function
    main_function()

# Print profiling report
profiler.print()
  _     ._   __/__   _ _  _  _ _/_   Recorded: 12:48:25  Samples:  2
 /_//_/// /_\ / //_// / //_'/ //     Duration: 0.206     CPU time: 0.000
/   _/                      v5.1.2

Profile at /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:5

0.205 <module>  /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:1
└─ 0.205 main_function  /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:8
   ├─ 0.104 first_function  /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:12
   │  └─ 0.104 helper_function  /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:18
   │     └─ 0.104 final_function  /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:21
   │        └─ 0.104 sleep  <built-in>
   └─ 0.101 second_function  /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:15
      └─ 0.101 helper_function  /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:18
         └─ 0.101 final_function  /var/folders/8l/xyy39wqj1c71tdcxq7vndwvr0000gn/T/ipykernel_33843/1893592390.py:21
            └─ 0.101 sleep  <built-in>