跳转到主要内容

为PyPy提供特殊优化的msgpack扩展

项目描述

PyPy有一个特殊的优化来以紧凑的方式存储整数和浮点数的列表,就像它们是C数组中的长整型和双精度浮点型。

msgpack-pypy是msgpack的一个扩展,它利用这种优化以提供非常快速的打包/解包。本质上,它通过一次复制整个数组来序列化Python整数/浮点数列表。

请注意,此类列表是使用msgpack 2.0提供的“扩展类型”机制进行序列化的,这意味着如果您使用msgpack-pypy将对象[1, 2, 3]打包,您不能使用普通的msgpack-python模块进行解包,因为扩展类型不被识别。您需要msgpack-pypy来解包它。

尽管名称如此,msgpack-pypy 确实在CPython上工作,尽管它在那里不带来任何速度上的好处。如果您有一个系统,其中PyPy进程打包对象,而CPython进程需要解包它,那么它是有用的。

性能

为了获得最佳性能,您应该使用2013年10月21日之后构建的夜间PyPy版本,因为它包含一个特殊的优化,可以一次读取/写入表示Python列表的所有字节。

以下是运行此基准测试得到的结果:https://bitbucket.org/antocuni/msgpack-pypy/src/default/benchmark.py

list of ints
  CPython/msgpack:   dump: 0.2287 ms     load: 0.2075 ms
  PyPy/msgpack:      dump: 0.2019 ms     load: 0.2447 ms
  PyPy/msgpack_pypy: dump: 0.1321 ms     load: 0.0391 ms

list of floats
  CPython/msgpack:   dump: 0.2295 ms     load: 0.2096 ms
  PyPy/msgpack:      dump: 1.1049 ms     load: 1.9803 ms
  PyPy/msgpack_pypy: dump: 0.1373 ms     load: 0.0392 ms

如您所见,对于整数,序列化速度提高了1.73倍,对于浮点数,速度提高了8倍。对于加载,速度提升更为显著,对于整数,速度提高了6.2倍,对于浮点数,速度提高了50倍(五十倍!)。

如果您使用的是PyPy的较旧版本(例如最后一个稳定版本,2.1),与纯msgpack相比,您仍然可以获得一点速度提升,但并不那么令人印象深刻。对于整数,序列化速度降低了1.66倍,对于浮点数,序列化速度提高了1.67倍。对于整数,加载速度提高了4倍,对于浮点数,加载速度提高了16倍。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

msgpack-pypy-0.0.2.tar.gz (3.3 kB 查看哈希值)

上传时间 源代码

由以下支持