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
I detected that is impossible to pickle an instance of a class having a method decorated with lru_cacheafter the latter method is called. If the method is never called, the pickle succeeds.
Example:
importpicklefrommethodtoolsimportlru_cacheclassMyClass(object):
@lru_cache(maxsize=None)defdecorated_method(self):
returnTruec=MyClass()
c.decorated_method() # without this call the pickle succeedspickle.dumps(c)
Traceback (most recent call last):
File "test_lru_cache_pickle.py", line 12, in <module>
pickle.dumps(c)
File "/usr/lib/python2.7/pickle.py", line 1380, in dumps
Pickler(file, protocol).dump(obj)
File "/usr/lib/python2.7/pickle.py", line 224, in dump
self.save(obj)
File "/usr/lib/python2.7/pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "/usr/lib/python2.7/pickle.py", line 425, in save_reduce
save(state)
File "/usr/lib/python2.7/pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "/usr/lib/python2.7/pickle.py", line 655, in save_dict
self._batch_setitems(obj.iteritems())
File "/usr/lib/python2.7/pickle.py", line 669, in _batch_setitems
save(v)
File "/usr/lib/python2.7/pickle.py", line 306, in save
rv = reduce(self.proto)
File "/usr/lib/python2.7/copy_reg.py", line 77, in _reduce_ex
raise TypeError("a class that defines __slots__ without "
TypeError: a class that defines __slots__ without defining __getstate__ cannot be pickled
The text was updated successfully, but these errors were encountered:
I detected that is impossible to pickle an instance of a class having a method decorated with
lru_cache
after the latter method is called. If the method is never called, the pickle succeeds.Example:
The text was updated successfully, but these errors were encountered: