저는 dill
입니다. 예, dill
은 일반적으로 속도가 느리지 만보다 강력한 직렬화에 대한 대가로 지불해야합니다. 많은 클래스와 함수를 직렬화하는 경우 dill.settings
에 dill
변형 중 하나를 사용하려고 할 수 있습니다. byref=True
을 사용하는 경우 dill
은 여러 객체를 참조로 피클 링합니다 (기본값보다 빠름). 다른 설정은 선택한 객체의 속도에 대한 선택 가능성을 조정합니다. 내 질문에 명시된 바와 같이
In [1]: import dill
In [2]: f = lambda x:x
In [3]: %timeit dill.loads(dill.dumps(f))
1000 loops, best of 3: 286 us per loop
In [4]: dill.settings['byref'] = True
In [5]: %timeit dill.loads(dill.dumps(f))
1000 loops, best of 3: 237 us per loop
In [6]: dill.settings
Out[6]: {'byref': True, 'fmode': 0, 'protocol': 2, 'recurse': False}
In [7]: dill.settings['recurse'] = True
In [8]: %timeit dill.loads(dill.dumps(f))
1000 loops, best of 3: 408 us per loop
In [9]: class Foo(object):
...: x = 1
...: def bar(self, y):
...: return y + self.x
...:
In [10]: g = Foo()
In [11]: %timeit dill.loads(dill.dumps(g))
10000 loops, best of 3: 87.6 us per loop
In [12]: dill.settings['recurse'] = False
In [13]: %timeit dill.loads(dill.dumps(g))
10000 loops, best of 3: 87.4 us per loop
In [14]: dill.settings['byref'] = False
In [15]: %timeit dill.loads(dill.dumps(g))
1000 loops, best of 3: 499 us per loop
In [16]:
체크 [이 답변] (http://stackoverflow.com/a/16626757/5741205) – MaxU
문제, dill'가의 cPickle에 비해 너무 느려'이다. – Tohiko
"_PiCloud 직렬화 된 객체는 일반 pickle/cPickle로드 및로드 함수를 사용하여 직렬화 해제 될 수 있습니다."그래서 직렬화/탈염 화 비율이 <<< 1 인 경우 도움이 될 수 있다고 생각합니다. – MaxU