python - 计算两个重写方法之间的时间
问题描述
我正在开发一个 python 程序,我想计算两个覆盖方法之间的时间。这是我的代码:
from time import time
........
# Code
........
class management:
start_time = time()
def method1(effect):
time1 = time() - start_time
print(f'{effect.src_file} from the method2 started successfully')
return time1
def method2(effect):
time2 = time() - start_time()
print(f'{effect.src_file} from the method2 started successfully')
return time2
effect_one = management.method1
effect_two = management.method2
.......
# Code
.......
现在的问题是我不知道method1 或method2 什么时候执行。它可以在程序运行时之间的任何时间。
那么如何获得两种方法之间的时间间隔。
注意:当一个方法被执行时,其他方法会在它之后立即执行(我不知道时间!)
解决方案
如果你不想management
用与时间相关的属性来污染你的类,你可以将它委托给另一个类,我们称之为Timer
:
import time
import functools
class Timer:
def __init__(self):
self.start_time = None
self.end_time = None
def start(self, f):
@functools.wraps(f)
def _(*args, **kwargs):
self.start_time = time.time()
return f(*args, **kwargs)
return _
def stop(self, f):
@functools.wraps(f)
def _(*args, **kwargs):
self.end_time = time.time()
return f(*args, **kwargs)
return _
@property
def diff_time(self):
return self.end_time - self.start_time
此类包含两个装饰器方法:start
,它将start_time
在其装饰函数启动时设置属性;和end
,它将end_time
在其装饰函数启动时设置属性。它还包含一个diff_time
属性,它将存储结束时间和开始时间之间的时间差。
现在,假设您的课程如下所示:
class Foo:
def bar(self):
print("bar called")
def baz(self):
print("baz called")
您可以创建一个实例并包装所需的方法:在这种情况下,我们将计算和Timer
之间的差异调用时间:bar
baz
timer = Timer()
Foo.bar = timer.start(Foo.bar)
Foo.baz = timer.stop(Foo.baz)
然后,只需正常运行您的代码:
foo = Foo()
foo.bar()
time.sleep(2)
foo.baz()
完成测量后,您可以检查经过了多少秒:
print(timer.diff_time)
# Outputs 2.002431869506836
推荐阅读
- javascript - 翻译 pdf 文件
- firebase - Firestore 给我错误:PERMISSION_DENIED:缺少或不足的权限
- c# - 如何在 Linux 中使用 VS Code 调试 ASP.NET Core 3.1(Pop!OS 20.04 以添加特异性)?
- node.js - 我在 VS Code 中看不到 firebase-fucntions 或任何其他内置函数的智能感知
- r - 折线图,分组线而不是单线
- javascript - 无法使用 Node.js 从 MySQL 表中正确检索数据
- php - php mysqli_query 如何与 mysqli_fetch_array 和命名索引一起工作?
- r - 循环遍历文件 R 中的文件名列表
- jquery - jquery中滑块的值
- python - numpy 通过矢量化或 einsum 组合元素(hadamard)和 3D 数组的外积的示例