2012-06-04 31 views

Respuesta

8

Uso timeit:

Este módulo proporciona una forma sencilla de tiempo pequeños trozos de código Python. Tiene tanto línea de comando como interfaces invocables. Evita una serie de trampas comunes para medir los tiempos de ejecución.

Necesitará una declaración de python en una cadena; si tiene una función principal en el código, se puede utilizar de esta manera:

>>> from timeit import Timer 
>>> timer = Timer('main()', 'from yourmodule import main') 
>>> print timer.timeit() 

La segunda cadena proporciona la configuración, el medio ambiente para la primera sentencia a ser programado en la segunda parte no está siendo programado,. y está destinado a establecer el escenario por así decirlo. La primera cadena se ejecuta a través de sus ritmos; por defecto un millón de veces, para obtener tiempos precisos.

Si necesita más detalles en cuanto a donde las cosas son lentas, utilice uno de los python profilers:

Un perfilador es un programa que describe el rendimiento de tiempo de ejecución de un programa, proporcionando una variedad de estadísticas.

La forma más fácil de ejecutar esto es mediante el uso del módulo cProfile desde la línea de comandos:

$ python -m cProfile yourprogram.py 
+1

Miré el enlace y me pareció un poco confuso. ¿Hay un script sencillo que muestre cómo usar esto? – MyNameIsKhan

+1

'timeit' es para micro-benchmarks: diminutos fragmentos de programa, no programas completos. – delnan

+0

Si todo lo que quiere saber es si es rápido o lento, 'timeit' está bien. Si necesita saber * dónde * es lento en un programa más grande, necesita un perfil. –

2
Para

fragmentos utilizan el módulo timeit.

Para programas completos, utilice el módulo cProfile.

2

Uso timeit

>>> import timeit 
>>> t = timeit.Timer(stmt="lst = ['c'] * 100") 
>>> print t.timeit() 
1.10580182076 
>>> t = timeit.Timer(stmt="lst = ['c' for x in xrange(100)]") 
>>> print t.timeit() 
7.66900897026 
5

Es posible que desee utilizar una función de profiler.

También es posible que desee medir el tiempo de funcionamiento de la función mediante el uso siguiente decorador simple:

import time 
def myprof(func): 
    def wrapping_fun(*args): 
     start = time.clock() 
     result = func(*args) 
     end = time.clock() 
     print 'Run time of %s is %4.2fs' % (func.__name__, (end - start)) 
     return result 
    return wrapping_fun 

Uso:

@myprof 
def myfun(): 
    # function body 
+0

Esa es una función de creación de perfiles bastante deficiente. En primer lugar, no me basaría en nada que valga la pena evaluar comparativamente. – delnan

+0

@delnan ¿Puedes explicar por qué? – MyNameIsKhan

+1

Numerosas razones, la mayoría de las cuales se reducen a "ninguno de nosotros es lo suficientemente inteligente como para hacerlo bien de forma directa". Para principiantes, 'time.clock' no es el reloj más preciso en todas las plataformas (cf.' default_clock() 'definido por' timetit'), y la salida es muy limitada (entremezclada con la salida del programa, necesita recopilarse y analizarse por mano). Los problemas menores incluyen no tener en cuenta las excepciones y no usar 'functools.wrap'. – delnan

5

Si estás en plataforma Linux/Unix/POSIX-combatible sólo tiene que utilizar time. De esta forma, no interferirá con su script y no lo ralentizará con un perfil innecesariamente detallado (para usted). Naturalmente, puede usarlo para prácticamente cualquier cosa, no solo para los scripts de Python.

Cuestiones relacionadas