Mik*_*rns 30
我是dill作者.是的,dill通常较慢,但这是您为更强大的序列化所付出的代价.如果你要序列化很多类和函数,那么你可能想尝试其中一个dill变体dill.settings 如果你使用byref=True那么dill将通过引用pickle几个对象(这比默认更快).其他设置权衡所选对象的速度可选性.
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]:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8576 次 |
| 最近记录: |