gpt4 book ai didi

python - dill vs cPickle 速度差异

转载 作者:太空狗 更新时间:2023-10-29 18:15:13 27 4
gpt4 key购买 nike

我正在尝试序列化数千个对象,其中一些对象是 lambda 对象。

由于 cPickle 不适用于 lambda,我尝试使用 dill。然而,在 unpickleing(或 undilling(?))时,计算速度下降了 10 倍以上。查看源代码,似乎 dill 在内部使用了 pickle,这可能是速度下降的原因。

我还有其他选择可以结合这两个模块的优点吗?

编辑:最显着的速度下降是在脱酸过程中。

最佳答案

我是 dill 的作者。是的,dill 通常较慢,但这是您为更强大的序列化付出的代价。如果您要序列化很多类和函数,那么您可能想尝试 dill.settings 中的 dill 变体之一 如果您使用 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]:

关于python - dill vs cPickle 速度差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37906154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com