Форум сайта python.su
0
Нужно логгировать время выполнения каждого метода класса ( т е начало-конец). Написал для этого простейший декотатор:
def dec_timemark(f):
def tmp(*args, **kwargs):
sys.stdout.write(strftime(“%d.%m.%Y %H:%M:%S”) + ‘ ’ + f.__name__ +
‘ begin’ + “\n” )
res = f(*args, **kwargs)
sys.stdout.write(strftime(“%d.%m.%Y %H:%M:%S”) + ‘ ’ + f.__name__ +
‘ end’ + “\n” )
return res
return tmp
используется так:
class Task():
@dec_timemark
def make_torrent():
sleep(10)
он работает НО не указывается имя класса. Т е хочется что-то типа:
“Task.make_torrent begin” ..
Офлайн
0
Может использовать то, что функция f будет вызываться с аргументом self?
Офлайн
32
Офлайн
17
Получить имя класса через self можно так: args.__class__.__name__
Только здесь будет название класса текущего объекта - это может быть и производный класс.
Офлайн
36
Когда-то на activestate нашел пример кода
def timing(f):
@wraps(f)
def wrapper(*args, **kwds):
start_time = _time.time()
result = f(*args, **kwds)
print("function: {} used {:.3f} seconds".format(
f.__name__, _time.time() - start_time))
return result
return wrapper
Отредактировано (Апрель 8, 2011 16:05:46)
Офлайн