Recientemente, al ejecutar un programa, es necesario contar el tiempo de ejecución del programa varias veces y optimizarlo. Es relativamente simple pensar en ello, pero cada vez que hay una ola de estadísticas de tiempo, no hay necesidad de escribirlas una y otra vez. Naturalmente, pienso en usar un decorador muy Pythonic. De una vez por todas, solo ve al código debajo.
import time
def timer(func):
def call_func(*args, **kwargs):
print("计时开始")
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
total_time = end_time - start_time
print("计时结束")
print(f"程序用时{int(total_time // 60)}分{total_time % 60:.2f}秒")
return call_func
if __name__ == '__main__':
@timer
def test(second): # 测试函数
time.sleep(second)
test(3.4)
El siguiente es el resultado de la ejecución.
Primero implementamos un decorador general e implementamos estadísticas de tiempo con el módulo de tiempo incorporado antes y después de la función func, y usamos la nueva función f string introducida por python 3.6 ( súper recomendado, rápido, intuitivo y simple ) Imprime el resultado.
Cuando necesitemos contar el tiempo de ejecución de un determinado programa o bloque de código (como la función de prueba anterior), agregue el decorador @timer que acabamos de escribir a la función de prueba.
Por supuesto, necesitamos reutilizar este módulo. En este momento, solo necesitamos copiar este mytimer.py (el nombre del bloque de código anterior, puede elegir cualquier otra cosa a voluntad) en nuestro proyecto, importar el módulo y usarlo donde necesita usar el tiempo El decorador es suficiente, el siguiente es un ejemplo de implementación:
# 导入计时器装饰器
from mytimer import timer
@timer # 给函数加装饰器
def spark_demo(usetime):
"""
假设我们要统计运行spark中spark_demo的总时长
"""
import time
time.sleep(usetime)
pass
if __name__ == '__main__':
spark_demo(74.4)
Resultado de la operación:
siempre que necesite agregar un @timer donde necesite usar el temporizador, ¡es simple y cómodo! ¡Es por eso que Pythoner tiene tanto volumen de cabello! ! !