为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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 612cf75dfcf7e1eec223a40ab6287c35610e0581356cf636e7e0a4887af47138 |
|
MD5 | 4b5f113d07aa87af4b264e1b7a6fe251 |
|
BLAKE2b-256 | 28b4e554e404987decdb9a4744361afe6175647c93a9b359267c6e4cdc48a7df |