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.
Supponiamo che il vostro programma/libreria abbia un file che invoca i metodi che volete profilare. Possiamo lanciare il comando
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.
Ci troveremo davanti una shell. Primo comando da dare è
Che carica il file. Dopo di che possiamo ordinarlo per ordine di tempo (prima le funzioni più costose)
E poi leggere i primi 10 elementi
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
sudo cp gprof2dot.py /usr/bin/
A questo punto createvi uno script bash con questo contenuto:
gprof2dot.py -f pstats $1 | dot -Tpng -o $2
Chiamatelo, ad esempio, gprof2png. Installatelo alla stessa maniera.
sudo cp gprof2png /usr/bin/
A questo punto potete lanciarlo semplicemente con
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.
Pingback: Frattanto nella blogosfera #18 « Ok, panico