Python中文
首页
教程
问答
标签
搜索
登录
注册
为什么json序列化比Python中的yaml序列化快得多?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我的代码在很大程度上依赖于yaml进行跨语言序列化,在加速一些东西的同时,我注意到与其他序列化方法(例如pickle、json)相比,yaml的速度非常慢。</p> <p>所以真正让我吃惊的是,json比yaml快得多,因为输出几乎相同。</p> <pre><code>>>> import yaml, cjson; d={'foo': {'bar': 1}} >>> yaml.dump(d, Dumper=yaml.SafeDumper) 'foo: {bar: 1}\n' >>> cjson.encode(d) '{"foo": {"bar": 1}}' >>> import yaml, cjson; >>> timeit("yaml.dump(d, Dumper=yaml.SafeDumper)", setup="import yaml; d={'foo': {'bar': 1}}", number=10000) 44.506911039352417 >>> timeit("yaml.dump(d, Dumper=yaml.CSafeDumper)", setup="import yaml; d={'foo': {'bar': 1}}", number=10000) 16.852826118469238 >>> timeit("cjson.encode(d)", setup="import cjson; d={'foo': {'bar': 1}}", number=10000) 0.073784112930297852 </code></pre> <p>PyYaml的CSafeDumper和cjson都是用C编写的,所以这不是一个C与Python的速度问题。我甚至添加了一些随机数据来查看cjson是否正在进行缓存,但它仍然比PyYaml快得多。我知道yaml是json的一个超集,但是使用这样简单的输入,yaml序列化器怎么会慢2个数量级呢?</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>在我研究过的应用程序中,字符串到数字(float/int)之间的类型推断是解析yaml的最大开销,因为字符串可以不加引号地编写。因为json中的所有字符串都是引号,所以在解析字符串时没有回溯。一个很好的例子是值0000000000000000000s,直到读到它的末尾,你才能知道这个值是一个字符串。</p> <p>其他的答案是正确的,但这是我在实践中发现的一个具体细节。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何根据每季度更新的数据补充每日数据?
10 回答
如何根据每小时的主机名计算可用的平均磁盘容量(python)
8 回答
如何根据每组的大小设置滚动窗口的大小?
10 回答
如何根据每行中的条件向数据帧中的列添加多个字符串?
9 回答
如何根据每行的内容对文本文件中的行进行分组?
5 回答
如何根据每行的各自索引对列进行分组?
3 回答
如何根据每行的条件替换np 2d数组中的值
8 回答
如何根据每行的第一个字符将文本数据迭代写入新文件?
2 回答
如何根据每行的第二个值将Python多维numpy数组导出到不同的文件?
9 回答
如何根据气体浓度设置颜色的依赖性绘制风玫瑰图
10 回答
如何根据气流中的不同天数为同一DAG设置不同的时间表
1 回答
如何根据水平线拆分图像?
9 回答
如何根据没有循环的另一列替换列(数据帧)中一个组的所有相同值?
8 回答
如何根据注释属性对networkx python图中的节点进行分组?
7 回答
如何根据测试参数正确跳过测试?
4 回答
如何根据测量维度设置opencv卡尔曼滤波器的测量矩阵[opencv+Python]
4 回答
如何根据浮动元素筛选浮动列表?
4 回答
如何根据海龟在Python中的位置从列表中识别它?
8 回答
如何根据海龟的位置确定点数
8 回答
如何根据消费者指数调整黄金价格?
10 回答