Форум сайта python.su
0
Нужно написать декоратор для двухуровневого кэширования результатов выполнения методов. Таким образом, при повторном вызове метода с теми же параметрами метод не должен выполняться, а результат должен возвращаться декоратором из кэша. Первый уровень кэша - в памяти, второй - в sqlite. Реализовать возможность параметром декоратора задавать максимальный размер кэша (число кэшированных результатов) в памяти.
@cache(max_memory=1000) def func(arg1, arg2): return arg1+arg2
Отредактировано A13x4nder (Июнь 20, 2014 18:23:16)
Офлайн
88
Уровень вопросов не соответствует уровню пролемы.
Работа с дерокаторами разжевана здесь неоднократно. На всяий случай нужно узнать как кэширует sqlite, если она вообще этим занимается, дальше pickle.
Офлайн
0
ShamanНасчет декораторов мне конкретный частный случай не ясен. Когда нужно передать атрибут декоратору функции - понятно, методу - никак не выходит. Вот и спрашиваю, есть ли у кого пример кода.
Уровень вопросов не соответствует уровню пролемы.Работа с дерокаторами разжевана здесь неоднократно. На всяий случай нужно узнать как кэширует sqlite, если она вообще этим занимается, дальше pickle.
Офлайн
568
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))
Офлайн
857
>>> 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)
Офлайн
0
FishHook, спасибо!!! Буду двигаться дальше!!!
Офлайн