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