|
|
|
import cloudpickle |
|
|
|
|
|
class PicklableWrapper: |
|
""" |
|
Wrap an object to make it more picklable, note that it uses |
|
heavy weight serialization libraries that are slower than pickle. |
|
It's best to use it only on closures (which are usually not picklable). |
|
|
|
This is a simplified version of |
|
https://github.com/joblib/joblib/blob/master/joblib/externals/loky/cloudpickle_wrapper.py |
|
""" |
|
|
|
def __init__(self, obj): |
|
while isinstance(obj, PicklableWrapper): |
|
|
|
obj = obj._obj |
|
self._obj = obj |
|
|
|
def __reduce__(self): |
|
s = cloudpickle.dumps(self._obj) |
|
return cloudpickle.loads, (s,) |
|
|
|
def __call__(self, *args, **kwargs): |
|
return self._obj(*args, **kwargs) |
|
|
|
def __getattr__(self, attr): |
|
|
|
if attr not in ["_obj"]: |
|
return getattr(self._obj, attr) |
|
return getattr(self, attr) |
|
|