Форум сайта python.su
Нужно написать декоратор для двухуровневого кэширования результатов выполнения методов. Таким образом, при повторном вызове метода с теми же параметрами метод не должен выполняться, а результат должен возвращаться декоратором из кэша. Первый уровень кэша - в памяти, второй - в sqlite. Реализовать возможность параметром декоратора задавать максимальный размер кэша (число кэшированных результатов) в памяти.
@cache(max_memory=1000) def func(arg1, arg2): return arg1+arg2
Отредактировано A13x4nder (Июнь 20, 2014 18:23:16)
Офлайн
Уровень вопросов не соответствует уровню пролемы.
Работа с дерокаторами разжевана здесь неоднократно. На всяий случай нужно узнать как кэширует sqlite, если она вообще этим занимается, дальше pickle.
Офлайн
ShamanНасчет декораторов мне конкретный частный случай не ясен. Когда нужно передать атрибут декоратору функции - понятно, методу - никак не выходит. Вот и спрашиваю, есть ли у кого пример кода.
Уровень вопросов не соответствует уровню пролемы.Работа с дерокаторами разжевана здесь неоднократно. На всяий случай нужно узнать как кэширует sqlite, если она вообще этим занимается, дальше pickle.
Офлайн
def increment(i): def decorator(func): def wrapper(*args, **kw): return func(*args, **kw) + i return wrapper return decorator @increment(10) def foo(x): return x ** 2 print (foo (8))
Офлайн
>>> class A: ... def dd(m=None): ... def d(f): ... def g(*args): ... print(m) ... return f(*args) ... return g ... return d ... ... @dd(10) ... def f1(self, arg1, arg2): ... return arg1 + arg2 ... ... @dd(20) ... def f2(self, arg1, arg2): ... return arg1 * arg2 ... >>> a = A() >>> a.f1(1, 2) 10 3 >>> a.f2(3, 4) 20 12 >>>
Отредактировано py.user.next (Июнь 20, 2014 19:45:43)
Офлайн
FishHook, спасибо!!! Буду двигаться дальше!!!
Офлайн