mirror of https://github.com/JosephKJ/OWOD.git
30 lines
960 B
Python
30 lines
960 B
Python
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
|
|
import cloudpickle
|
|
|
|
|
|
class PicklableWrapper(object):
|
|
"""
|
|
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):
|
|
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):
|
|
# Ensure that the wrapped object can be used seamlessly as the previous object.
|
|
if attr not in ["_obj"]:
|
|
return getattr(self._obj, attr)
|
|
return getattr(self, attr)
|