Commit 6d4a77c7 authored by Yuxin Wu's avatar Yuxin Wu

[MaskRCNN] make config serialize correctly

parent c52c8cc4
...@@ -20,6 +20,9 @@ class AttrDict(): ...@@ -20,6 +20,9 @@ class AttrDict():
def __getattr__(self, name): def __getattr__(self, name):
if self._freezed: if self._freezed:
raise AttributeError(name) raise AttributeError(name)
if name.startswith('_'):
# Do not mess with internals. Otherwise copy/pickle will fail
raise AttributeError(name)
ret = AttrDict() ret = AttrDict()
setattr(self, name, ret) setattr(self, name, ret)
return ret return ret
......
...@@ -13,7 +13,7 @@ from .develop import create_dummy_func ...@@ -13,7 +13,7 @@ from .develop import create_dummy_func
msgpack_numpy.patch() msgpack_numpy.patch()
assert msgpack.version >= (0, 5, 2) assert msgpack.version >= (0, 5, 2)
__all__ = ['loads', 'dumps'] __all__ = ['loads', 'dumps', 'NonPicklableWrapper']
MAX_MSGPACK_LEN = 1000000000 MAX_MSGPACK_LEN = 1000000000
...@@ -81,3 +81,21 @@ if os.environ.get('TENSORPACK_SERIALIZE', 'msgpack') == 'pyarrow': ...@@ -81,3 +81,21 @@ if os.environ.get('TENSORPACK_SERIALIZE', 'msgpack') == 'pyarrow':
else: else:
loads = loads_msgpack loads = loads_msgpack
dumps = dumps_msgpack dumps = dumps_msgpack
class NonPicklableWrapper(object):
"""
TODO
https://github.com/joblib/joblib/blob/master/joblib/externals/loky/cloudpickle_wrapper.py
"""
def __init__(self, obj):
self._obj = obj
def __reduce__(self):
import dill
s = dill.dumps(self._obj)
return dill.loads, (s, )
def __call__(self, *args, **kwargs):
return self._obj(*args, **kwargs)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment