You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
That'd be a good option to have cache_it() and cache_it_json() either auto-detecting instance methods or being marked of such a use case by, for example, strip_first_arg boolean parameter that'd perform something like
pickle.dumps(args[1:])
There's a side effect in such a use case, I know, but could be an option for those who know what they do.
In my case, using instance methods eliminates a need to call getLogger every time I need to log something and provides an option to use one, instance-wide, logger (which certainly cannot be pickled because of file descriptors inside any logger object).
The text was updated successfully, but these errors were encountered:
SantjagoCorkez
changed the title
Allow cache_it* decorators do not provide a way to cache instance methods
Allow cache_it* decorators to provide a way to cache instance methods
Nov 10, 2014
I think you can't just strip self out from the cache_key, since different instances probably will return different values even for the same method. I believe this is the default use case.
Probably in your case you need something different from this, so I think you can create your own decorator around cache_it decorator. If you need help for doing this, please let me know.
Well, in my case the solution just strips out the first function arg. No matter what is it: self, cls or any generic argument as in staticmethod. And this guarantees no side effects in my case, because instance's self contains no information that could cause difference between instance of class A(B) and class C(B), where B inits only logger.
As I've said, that could be specially marked in documentation as 'think twice when you use this argument'.
As for more generic solution this could be also implemented as strip_args=0 argument for decorator and pickle.dumps(args[strip_args:]) in code. That could help when one needs to exclude some N-first args of a function from cache entry's hash key.
That'd be a good option to have cache_it() and cache_it_json() either auto-detecting instance methods or being marked of such a use case by, for example, strip_first_arg boolean parameter that'd perform something like
pickle.dumps(args[1:])
There's a side effect in such a use case, I know, but could be an option for those who know what they do.
In my case, using instance methods eliminates a need to call getLogger every time I need to log something and provides an option to use one, instance-wide, logger (which certainly cannot be pickled because of file descriptors inside any logger object).
The text was updated successfully, but these errors were encountered: