|
|
| 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)
|
|
|