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

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” ..
Studentik
Может использовать то, что функция f будет вызываться с аргументом self?
o7412369815963
str(f) ?
agalen
Получить имя класса через self можно так: args.__class__.__name__
Только здесь будет название класса текущего объекта - это может быть и производный класс.
pyuser
Когда-то на 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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB