fechas - Prueba de velocidad de Python-Diferencia de tiempo-milisegundos
fechas en python (12)
¿Cuál es la forma correcta de comparar 2 veces en Python para probar la velocidad de una sección de código? Intenté leer los documentos API. No estoy seguro de entender lo de Timedelta.
Hasta ahora tengo este código:
from datetime import datetime
tstart = datetime.now()
print t1
# code to speed test
tend = datetime.now()
print t2
# what am I missing?
# I''d like to print the time diff here
Aquí hay una función personalizada que imita las funciones de tic
toc
de Matlab / Octave.
Ejemplo de uso:
time_var = time_me(); # get a variable with the current timestamp
... run operation ...
time_me(time_var); # print the time difference (e.g. ''5 seconds 821.12314 ms'')
Función:
def time_me(*arg):
if len(arg) != 0:
elapsedTime = time.time() - arg[0];
#print(elapsedTime);
hours = math.floor(elapsedTime / (60*60))
elapsedTime = elapsedTime - hours * (60*60);
minutes = math.floor(elapsedTime / 60)
elapsedTime = elapsedTime - minutes * (60);
seconds = math.floor(elapsedTime);
elapsedTime = elapsedTime - seconds;
ms = elapsedTime * 1000;
if(hours != 0):
print ("%d hours %d minutes %d seconds" % (hours, minutes, seconds))
elif(minutes != 0):
print ("%d minutes %d seconds" % (minutes, seconds))
else :
print ("%d seconds %f ms" % (seconds, ms))
else:
#print (''does not exist. here you go.'');
return time.time()
Desde Python 2.7 existe el método timedelta.total_seconds (). Entonces, para obtener los milisegundos transcurridos:
>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> delta = b - a
>>> print delta
0:00:05.077263
>>> int(delta.total_seconds() * 1000) # milliseconds
5077
El siguiente código debería mostrar el tiempo detla ...
from datetime import datetime
tstart = datetime.now()
# code to speed test
tend = datetime.now()
print tend - tstart
Es posible que desee examinar los módulos de perfil . Obtendrá una mejor lectura de dónde están sus ralentizaciones, y gran parte de su trabajo estará totalmente automatizado.
Es posible que desee utilizar el módulo timeit en su lugar.
No soy un programador de Python, pero sé cómo usar Google y esto es lo que encontré: utiliza el operador "-". Para completar tu código:
from datetime import datetime
tstart = datetime.now()
# code to speed test
tend = datetime.now()
print tend - tstart
Además, parece que puede usar la función strftime () para formatear el cálculo del intervalo de tiempo a fin de mostrar la hora sin embargo le hace feliz.
Puede usar timeit como este para probar un script llamado module.py
$ python -mtimeit -s ''import module''
Sé que es tarde, pero realmente me gusta usar:
start = time.time()
##### your timed code here ... #####
print "Process time: " + (time.time() - start)
time.time()
te da segundos desde la época. Debido a que este es un tiempo estandarizado en segundos, simplemente puede restar la hora de inicio del tiempo de finalización para obtener el tiempo del proceso (en segundos). time.clock()
es bueno para la evaluación comparativa, pero he encontrado que es inútil si quieres saber cuánto tiempo tomó tu proceso. Por ejemplo, es mucho más intuitivo decir "mi proceso demora 10 segundos" que decir "mi proceso requiere 10 unidades de reloj del procesador"
>>> start = time.time(); sum([each**8.3 for each in range(1,100000)]) ; print (time.time() - start)
3.4001404476250935e+45
0.0637760162354
>>> start = time.clock(); sum([each**8.3 for each in range(1,100000)]) ; print (time.clock() - start)
3.4001404476250935e+45
0.05
En el primer ejemplo anterior, se muestra un tiempo de 0.05 para time.clock () vs 0.06377 para time.time ()
>>> start = time.clock(); time.sleep(1) ; print "process time: " + (time.clock() - start)
process time: 0.0
>>> start = time.time(); time.sleep(1) ; print "process time: " + (time.time() - start)
process time: 1.00111794472
En el segundo ejemplo, de alguna manera, el tiempo del procesador muestra "0" a pesar de que el proceso durmió por un segundo. time.time()
muestra correctamente un poco más de 1 segundo.
Simplemente puede imprimir la diferencia:
print tend - tstart
También puedes usar:
import time
start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)
O podrías usar los perfiladores de Python .
time.time () / datetime es bueno para un uso rápido, pero no siempre es 100% preciso. Por esa razón, me gusta utilizar uno de los perfiles de biblioteca estándar (especialmente hotshot) para descubrir qué es qué.
datetime.timedelta
es solo la diferencia entre dos fechas ... por lo que es como un período de tiempo, en días / segundos / microsegundos
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a
>>> c
datetime.timedelta(0, 4, 316543)
>>> c.days
0
>>> c.seconds
4
>>> c.microseconds
316543
Tenga en cuenta que c.microseconds
solo devuelve la porción de microsegundos del timedelta. Por motivos de tiempo, siempre use c.total_seconds()
.
Puede hacer todo tipo de operaciones matemáticas con datetime.timedelta, por ejemplo:
>>> c / 10
datetime.timedelta(0, 0, 431654)
Sin embargo, podría ser más útil observar el tiempo de CPU en lugar del tiempo de reloj de pared ... eso es dependiente del sistema operativo, sin embargo ... en sistemas de tipo Unix, revisa el comando ''tiempo''.