【发布时间】:2013-12-27 04:14:06
【问题描述】:
假设我有以下代码,我使用 get_duration 装饰器打印出方法持续了多长时间。
import datetime
import time
def get_duration(function):
def wrapper(*args, **kwargs):
start = datetime.datetime.now()
print "starting process %s()" %function.__name__
function(*args, **kwargs)
end = datetime.datetime.now()
print "Process lasted: ", end - start
return wrapper
class Operations(object):
def __init__(self, a, b):
self.a = a
self.b = b
@get_duration
def add(self):
time.sleep(1)
print self.a + self.b
@get_duration
def sub(self):
time.sleep(1)
print self.a - self.b
my_class = Operations(2, 98)
my_class.add()
my_class.sub()
输出
>> starting process add()
>> 100
>> Process lasted: 0:00:01.000260
>> starting process sub()
>> -96
>> Process lasted: 0:00:01.001161
我可以用类方法或类似的东西替换它吗(下面的伪代码):
my_class = Operations(2, 98)
my_class.add.get_duration #runs add(), prints duration
my_class.add #runs add() does not print duration
【问题讨论】:
-
你应该使用 timeit 模块来处理这类事情。
-
谢谢,但这只是装饰器的一个例子。我对这个过程的具体时间不感兴趣。
-
也许你可以直接使用装饰器,像这样:get_duration(my_class.add)()?