[python] Počítání volání metod

Michal Vyskocil michal.vyskocil na gmail.com
Čtvrtek Prosinec 20 23:07:54 CET 2007


Dne Thursday 20 of December 2007 22:40:57 martin.stiborsky na gmail.com 
napsal(a):
> Zdravím, dneska budu ještě jednou otravovat.
> Michal Vyskočil mi poradil, jak přijít na jméno volané metody, za to
> mu díky, mně to hned posloužilo k realizování mého záměru, počítání
> kolikrát byla metoda zavolána, nevím jestli to neřeším úplně blbě.

No, zrovna modul inspect mi prijde jako kanon na vrabce. Daleko elegantnejsi 
bude pouzit dekoratory a napsat neco podobneho, jako

stats = {}

def counter(func):
  def wrapper(*args, **kwargs):
    ret = func(*args, **kwargs)
    if not func.__name__ in stats:
        stats[func.__name__] = 0
    stats[func.__name__] += 1
  return wrapper

@counter
def foo():
    return "foo"

for i in xrange (5):
    ret = foo()
    print "%d: %s" % (stats["foo"], ret)

Pochopitelne to neni uplne hotove, bylo by vhodnejsi pouzivat nejaky 
Singleton, misto globalni promenne a mohlo by to umet ukladat 
modul.jmeno_funkce, pripadne modul.trida.jmeno_metody a pripadne i parametry 
(napr id), ale pro prvni nastrel to snad staci. O serializaci hodnot na 
vystup ani nemluve.

Navic, neexistuje nejaka knihovna pro Python, ktera statistiky pristupu resi? 
Pripadne nastroje pro analyzu logu webserveru?


-- 
best regards
Michal Vyskocil


Další informace o konferenci Python