Python Profiling

Durante lo sviluppo di Cobra Draugths ho avuto la necessità di trovare un profiler per Python che facesse al caso mio. Dato che non c’è un unico strumento adatto ho deciso di spiegare passo passo come ottenere dei dati di profiling veloci, puliti e graficamente guardabili.

È una guida espressa: niente discussioni, niente commenti, solo fatti e procedure.

1. cProfile

Primo passo. Installare i tool di profiling per python.

sudo apt-get install python-profiler

Supponiamo che il vostro programma/libreria abbia un file che invoca i metodi che volete profilare. Possiamo lanciare il comando

python -m cProfile -o output.prof test.py

Questo avvierà il file test.py e, una volta terminato, creerà un file output.prof contenente tutte le informazioni di profiling.

2. Esplorare il file

Il modo più semplice per esplorare il file creato è usare il modulo pstats.

python -m pstats

Ci troveremo davanti una shell. Primo comando da dare è

read output.prof

Che carica il file. Dopo di che possiamo ordinarlo per ordine di tempo (prima le funzioni più costose)

sort time

E poi leggere i primi 10 elementi

stats 10

3. Grafo dei tempi

Il modo più elegante, chiaro e stiloso per ottenere un report leggibile è trasformare tutto in un bel grafo colorato. Per fare questo usiamo il tool Gprof2dot.

Scaricate lo script Python e installatelo con un

chmod +x gprof2dot.py
sudo cp gprof2dot.py /usr/bin/

A questo punto createvi uno script bash con questo contenuto:

#!/bin/bash
gprof2dot.py -f pstats $1 | dot -Tpng -o $2

Chiamatelo, ad esempio, gprof2png. Installatelo alla stessa maniera.

chmod +x gprof2png
sudo cp gprof2png /usr/bin/

A questo punto potete lanciarlo semplicemente con

gprof2png output.prof grafo.png

Questo creerà una gradevole immagine png con tutti i dati di vostro interesse. Come esempio posto l’immagine generata per Cobra Draughts in una partita AI vs. AI.

Buon profiling.