SoFunction
Updated on 2025-04-14

Python uses cProfile for performance analysis

In Python development, code performance analysis is an important part of optimization and debugging. Through performance analysis, performance bottlenecks in the program can be found and then optimized. cProfile is a built-in performance analysis tool in Python. It can analyze the execution time and function calls in detail. This article will introduce in detail how to use cProfile for code performance analysis, covering installation, basic usage, analysis results interpretation and practical application cases.

Introduction to cProfile

cProfile is a module in the Python standard library that collects performance data of your code. It provides detailed function call statistics, including the number of calls, the total execution time, the average execution time per call, etc.

Install cProfile

cProfile is part of the Python standard library and requires no additional installation. Just make sure that the module is included in your Python environment.

Performance analysis using cProfile

Basic usage

You can use cProfile to run Python scripts directly on the command line and generate performance analysis reports.

Analyze a Python script

Suppose there is a script called as follows:

import time
 
def slow_function():
    (2)
 
def fast_function():
    (0.5)
 
def main():
    slow_function()
    fast_function()
 
if __name__ == "__main__":
    main()

The script can be analyzed using the following command:

python -m cProfile 

Output result:

5 function calls in 2.501 seconds
 
   Ordered by: standard name
 
   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    2.501    2.501 :1(<module>)
        1    0.000    0.000    2.001    2.001 :4(slow_function)
        1    0.000    0.000    0.500    0.500 :7(fast_function)
        1    0.000    0.000    2.501    2.501 :10(main)
        1    0.000    0.000    0.000    0.000 {built-in method }
        1    2.001    2.001    2.001    2.001 {built-in method }
        1    0.500    0.500    0.500    0.500 {built-in method }

Interpretation of analysis results

ncalls: Number of function calls.

tottime: The total execution time of the function, excluding the time when other functions are called.

percall: The average execution time of each call is equal to tottime/ncalls.

cumtime: The cumulative execution time of the function, including the time when other functions are called.

percall: The average execution time of each call is equal to cumtime/ncalls.

filename:lineno(function): The file name, line number and function name where the function is located.

With this data, performance bottlenecks can be identified and optimized.

Advanced usage

Save the analysis results to a file

The performance analysis results can be saved to a file for easier subsequent analysis.

python -m cProfile -o  

Use the -o option to specify the output file name.

Read and analyze result files

The saved result files can be read and analyzed using the pstats module.

import pstats
 
p = ('')
p.sort_stats('cumulative').print_stats(10)

In this example, the file is read and the first 10 records are printed in order by cumulative time.

Visualize the analysis results using SnakeViz

SnakeViz is a web-based tool that can visually display the analysis results of cProfile.

Install SnakeViz

pip install snakeviz

Visualize results with SnakeViz

snakeviz

This will start a web server and display the visual analysis results in the browser.

Practical application cases

Analyze the performance of sorting algorithm

Suppose there is a script that contains multiple sorting algorithms and wants to analyze their performance.

import random
import time
 
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
 
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)
 
def main():
    arr = [(0, 1000) for _ in range(1000)]
    bubble_sort(())
    quick_sort(())
 
if __name__ == "__main__":
    main()

Use cProfile to perform performance analysis of this script:

python -m cProfile -o sort_prof.prof example_sort.py

Read and analyze results:

import pstats
 
p = ('sort_prof.prof')
p.sort_stats('cumulative').print_stats(10)

Through the analysis of the results, we can find which sorting algorithm has better performance on a specific data set, so that we can optimize or select the appropriate algorithm.

Summarize

This article details how to use Python's built-in performance analysis tool cProfile for code performance analysis. With cProfile, developers can easily collect and analyze the performance data of their code and find performance bottlenecks. The article covers the basic usage of cProfile, interpretation of analysis results, advanced usage methods, and how to visualize analysis results. Through practical cases, we show how to use cProfile to perform performance analysis of the sorting algorithm, helping everyone better understand and practice performance analysis technology.

This is the end of this article about Python's performance analysis using cProfile. For more related Python cProfile performance analysis content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!