4 dic. 2012

Profiling de un script python con line_profiler

Ahora se mostrará el uso de la herramienta line_profiler para hacer profiling de programas Python.

Lo primero que se tiene que hacer es instalar line_profiler con el comando easy_install o pip:
easy_install line_profiler



pip install line_profiler





El código que se va a revisar es el mismo del artículo anterior (matriz inversa). La diferencia es que se define en la función que genera la matriz inversa el uso del decorador profile.

El código es el siguiente:

#!/usr/bin/env python

# -*- coding: utf-8 -*-



#Se importa numpy como np

import numpy as np



#Se define el uso del decorador profile. En la funcion que genera matrices inversas.

@profile

def Inversa(n):

    a = np.matrix(np.random.rand(n, n))

    return a.I



#Se define una lista de  tamaños de la matriz

tamagno = 2 ** np.arange(0, 12)





#Se recorre la lista de tamaños y se invierte cada matriz con la

#funcion.

for n in tamagno:

    Inversa(n)

Para realizar el profiling se ejecuta el siguiente comando:


ecrespo@jewel:~/proyectos/ernesto-ecrespo.blogspot/line_profiler$ kernprof.py -l -v  matrizinversa.py 

Wrote profile results to matrizinversa.py.lprof

Timer unit: 1e-06 s



File: matrizinversa.py

Function: Inversa at line 10

Total time: 6.05993 s



Line #      Hits         Time  Per Hit   % Time  Line Contents

==============================================================

    10                                           @profile

    11                                           def Inversa(n):

    12        12       260506  21708.8      4.3      a = np.matrix(np.random.rand(n, n))

    13        12      5799424 483285.3     95.7      return a.I

El resultado muestra el tiempo total de ejecución, Luego muestra cada línea de ejecución, y el porcentaje de tiempo que se ha ejecutado. Se nota que la generación de la matriz no tarda mucho, pero al invertirla si un 95,7% del tiempo de ejecución.
El significado de cada parámetro es:
Line: Es el número de línea en el archivo.
Hits: Es el número de veces que la línea se ejecuta.
Time: Tiempo que gasta al ejecutar cada línea.
Per Hit: Tiempo promedio que se gasta al ejecutar cada línea.
% Time: Porcentaje de tiempo que se gasta al ejecutar la línea relativo al tiempo que se gasta en ejecutar todas las líneas.

El código del script se encuentra en bitbucket.

Publicar un comentario en la entrada

AddThis