[Python-es] como saber cuanto tarda en ejecutarse una funcion?

49 views
Skip to first unread message

xiao xiong mao panda rojo

unread,
Aug 13, 2013, 11:43:49 PM8/13/13
to python es lista
trabajo en un programa que lee el puerto serial, toma unos 12 bytes, realiza una larga función y lee el serial otra ves, en un bucle infinito.
ya que recibe nuevos datos vía serial cada 10 mili-segundos mi función debe terminar antes.
creo que la función esta tardando mucho mas en ejecutarse.

seguramente alguno ha hecho esto antes.
alguna forma sencilla de saber cuanto le toma a la función completarse?
con arduino uso el método micros() que cuenta los micro-segundos que lleva encendido el microcontrolador

unsigned long tt = micros();
aLongProcess();
Serial.println( micros()-tt );

no hay problema si consigo los resultados en micro o mili segundos
gracias

Daπid

unread,
Aug 14, 2013, 3:33:43 AM8/14/13
to La lista de python en castellano
time.time() te da el tiempo en segundos, con precisión de
microsegundos, igual que micros de arduino.

Si quieres hacerlo más fino, puedes usar timeit (método mágico %timeit
de ipython), que hace una medida más precisa (útil, por ejemplo, si
estás desarrollando y quieres ver si una optimización es efectiva). Si
tu función llama a funciones dentro, lo mejor es hacer "profiling"
para ver qué partes están llevando tiempo. Para esto te recomiendo
runsnakerun. Si no tienes funciones internas, usa line_profiler, que
medirá cada línea.

Hace tiempo colaboré con Pybonacci en una lista de formas de acelerar
Python. Si necesitas mejorar el rendimiento de tu función quizá alguna
de estas te sea útil:
http://pybonacci.wordpress.com/2012/05/01/python-es-lento/

Algunos consejos más concretos y prácticos, por Kiko:
http://pybonacci.wordpress.com/2012/06/24/revisitando-python-es-lento-pequenos-trucos/


David.

2013/8/14 xiao xiong mao panda rojo <ailurus...@hotmail.com>:
> _______________________________________________
> Python-es mailing list
> Pyth...@python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

monoBOT

unread,
Aug 14, 2013, 3:52:50 AM8/14/13
to La lista de python en castellano
Yo para eso uso una función decoradora, http://monobotblog.alvarezalonso.es/archives/1083 aunque la salida es en segundos.

Deberás ajustar la precisión para que te lo de en milisegundos http://docs.python.org/3.2/library/datetime.html#timedelta-objects

Saludos


_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/




--
monoBOT
Visite mi sitio(Visit my site): monobotblog.alvarezalonso.es

Ricardo Azpeitia Pimentel

unread,
Aug 14, 2013, 12:23:26 PM8/14/13
to La lista de python en castellano
Puedes usar el modulo timeit (en la documentación hay suficientes ejemplos)

http://docs.python.org/2/library/timeit.html

Creo que 10ms es bastante tiempo. Pero en caso que tu funcion tarde
mas en ejecutarse puedes hacer varias cosas:

1. Optimizar tu código
2. Escribir esa parte en C
3. Los datos que recibas los puedes ir poniendo en un queue y tener
workers que consuman esa información (de manera asincrónica).

Juan M. Puertas

unread,
Aug 14, 2013, 1:15:25 PM8/14/13
to La lista de python en castellano
Hola
Es una lástima que Psyco ya no funcione en las nuevas versiones de Python, antes con sólo importarlo y llamarlo, el programa se volvía varias veces más rápido.
Saludos
--
Nota: Por problemas con el e-mail. Puede que recibas de nuevo este mensaje en un tiempo.

xiao xiong mao panda rojo

unread,
Aug 15, 2013, 2:20:09 AM8/15/13
to python es lista
gracias a todos. ya pude comprobar que mi función no tarda tanto como pensé
encontré unos bugs.
fue un error de indentacion.
gracias por sus sugerencias. seguro me serán útiles para optimizar mi código.


Date: Wed, 14 Aug 2013 19:15:25 +0200
From: soft....@gmail.com
To: pyth...@python.org
Subject: Re: [Python-es] como saber cuanto tarda en ejecutarse una funcion?
Reply all
Reply to author
Forward
0 new messages