Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 7, 2011 17:27:39

Bdfy1
От:
Зарегистрирован: 2009-11-03
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

логгировать время выполнения метода класса

Нужно логгировать время выполнения каждого метода класса ( т е начало-конец). Написал для этого простейший декотатор:

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” ..



Офлайн

#2 Апрель 7, 2011 18:57:43

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

логгировать время выполнения метода класса

Может использовать то, что функция f будет вызываться с аргументом self?



Офлайн

#3 Апрель 7, 2011 19:52:06

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

логгировать время выполнения метода класса

Офлайн

#4 Апрель 8, 2011 09:45:18

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

логгировать время выполнения метода класса

Получить имя класса через self можно так: args.__class__.__name__
Только здесь будет название класса текущего объекта - это может быть и производный класс.



Офлайн

#5 Апрель 8, 2011 16:03:49

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

логгировать время выполнения метода класса

Когда-то на 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
периодически обрабатываю напильником :), попробуйте…

ЗЫ.

import time as _time

from functools import wraps



Отредактировано (Апрель 8, 2011 16:05:46)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version