使用JSON越多, 你就越有可能遇到JSON编码或解码瓶颈。Python的内置库也不错, 但是还有多个更快的JSON库可用: 如何选择使用哪一个呢?

事实是,没有一个正确的答案,没有一个最快的JSON库来超越其他所有库:

一个“快速的JSON库”对不同的人意味着不同的东西,因为它们的使用模式不同。

速度并不是一切——你可能还会关心其他一些事情,比如安全性和可定制性。

因此,为了帮助你根据需要选择最快的JSON库,我想在这里分享一下我为Python选择一个快速JSON库所经历的过程。你可以使用这个过程来选择最适合你的特殊需要的库:

确保确实有问题需要用到JSON库来解决。

定义基准。

根据附加要求来过滤。

对剩下的候选者进行基准测试。


步骤1: 你确实需要一个新的JSON 库吗?

使用JSON并不意味着它就是一个相关的瓶颈。在考虑使用哪个JSON库之前,你需要一些证据来表明Python的内置JSON库确实在特定应用程序中存在问题。

在我的例子中,我从我的原因日志库Eliot(causal logging library Eliot)的基准测试中学到了这一点,它表明JSON编码占用了大约25%的用于生成消息的CPU时间。我能得到的最大加速是比原先运行快33%(如果JSON编码时间变为零),但那是一个足够大的时间块,使用最快的JSON库会让这个时间块减小到最低。

步骤 2: 定义基准

如果你查看各种JSON库的基准页面,你会发现它们都会讨论如何处理各种不同的消息。然而,这些消息并不一定与你的使用相关。其他人会经常测量非常大型消息,但在我的例子中,我只关心小型消息。

所以你想要提出一些符合你的特定使用模式的措施:

你关心编码、解码,还是两者都关心?

你使用的是小型消息还是大型消息?

典型的消息是什么样的?

在我的例子中,我主要关心的是编码小型消息,即由Eliot生成的日志消息的特定结构。基于一些真实的日志,我整理出了以下示例消息:

步骤 3: 根据附加要求来过滤

性能并不是一切——你可能还会关心其他一些事情。在我的例子中:

安全性/抗崩溃性:日志消息可以包含来自不可信源的数据。如果JSON编码器在不良数据上崩溃,这对可靠性或安全性都不好。

自定义编码: Eliot支持自定义JSON编码,因此您可以序列化其他类型的Python对象。有些JSON库支持这一点,有些则不支持。

跨平台: 运行在Linux、macOS和Windows上。

维护: 我不想依赖一个没有得到积极支持的库。

我考虑的库有orjson、rapidjson、ujson和hyperjson。

我根据上面的标准过滤掉了其中的一些:

ujson有很多关于崩溃的bug,即使那些已经修复的崩溃也并不总是可用,因为自2016年以来就没有再发布过新版本。

hyperjson只有针对macOS的包,而且总体看起来也相当不成熟。

步骤 4: 基准测试

最后的两个竞争者是rapidjson和orjson。我运行了以下基准测试:

结果如下:

即使需要额外的Unicode解码,orjson也是最快的(对于这个特定的基准测试!)。

与往常一样,我也需要权衡。orjson的用户比rapidjson要少(比较orjson PyPI stats和rapidjson PyPI stats),并且它也没有Conda包,所以我必须自己为Conda-forge对它进行打包。但是,它确实要快得多。

需求为大

你应该使用orjson吗? 不一定。你可能有不同的要求,你的基准测试也可能不同——例如,你可能需要解码大型文件。

关键点是过程: 找出你的特定要求,比如性能以及其他方面,然后选择最适合你的需求的库。

感谢您的阅读,以上就是怎么样为Python选择一个更快的JSON库?你学会了吗?更多有趣有料的Python实战项目尽在马哥教育官网,敬请关注!

马哥教育​www.magedu.com

python创建一个json_如何为Python选择一个更快的JSON库相关推荐

  1. 如何用python创建文件_怎么用python建立一个txt文档,并输入内容-百度经验

    这里,我要用python,在电脑桌面上,新建一个文件夹a,并在文件夹a里面,建立一个txt文档--b.txt,写上如下文字: 你好, 世界. 工具/原料 电脑 python 方法/步骤 1 在电脑桌面 ...

  2. 用python创建微信机器人_用Python创建微信机器人

    原标题:用Python创建微信机器人 文/裸睡的猪哥 图片来源于网络 微信,一个日活10亿的超级app,不仅在国内社交独领风骚,在国外社交也同样占有一席之地.今天我们要讲的便是如何用Python来做一 ...

  3. python创建配置文件_如何写python的配置文件

    一.创建配置文件 在D盘建立一个配置文件,名字为:test.ini 内容如下: [baseconf] host=127.0.0.1 port=3306 user=root password=root ...

  4. python创建虚拟环境jupyter_机器学习中python的有关使用技巧【创建虚拟环境、jupyter的kernel修改】...

    1.创建虚拟环境 *注:(这里是python2.python3环境共存,我要创建一个python3的虚拟环境) 一.先安装虚拟环境变量: pip3 install -U virtualenv 二.创建 ...

  5. python创建空元组_用Python创建空元组

    python创建空元组 Python | 空元组 (Python | empty tuple) In python, we can also create a tuple without having ...

  6. python创建txt文件并写入-Python创建文件和追加文件内容实例

    一.用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行: #python >>>f=open('f.txt','w') # r只读,w可写,a追加 >> ...

  7. python中的json_简单介绍Python中的JSON使用

    JSON进阶 Python的dict对象可以直接序列化为JSON的{},不过,很多时候,我们更喜欢用class表示对象,比如定义Student类,然后序列化: import json class St ...

  8. python创建学生字典_用python创建简单字典

    person1 wine2 person1 wine1 person2 wine1 person2 wine2 person2 wine3 person2 wine4 person2 wine5 以上 ...

  9. Python很慢,但它即将变得更快

    作为一门异常受欢迎的编程语言,Python的优点有很多,比如:易于学习.用途广泛.有成千上万个用于数据科学的有用的库.但同时,Python一直被诟病的就是它运行速度太慢. 在去年的PyCon US 2 ...

最新文章

  1. 聚类算法是什么?聚类(clustering)有哪些常用的评估方法?评估方法的公示是什么?轮廓系数(Silhouette Coefficient)、平方根标准误差、R方、ARI分别是什么?
  2. 练习5.1更新——四则运算 测试与封装
  3. java 静态数据_Java 静态数据初始化的示例代码
  4. C#XmlDocument无法读取utf-16文件
  5. 2篇CIKM详解阿里妈妈搜索广告CTR模型如何低碳瘦身
  6. mybatis-generator 逆向生成工具(实体、dao、sql)
  7. Android之旅---广播(BroadCast)
  8. MySQL:Innodb page clean 线程 (二) :解析
  9. lia人是什么意思_69年属鸡人终身灾难是什么意思
  10. 作者:刘建楠(1963-),男,就职于中国石油庆阳石化公司
  11. (转)Bootstrap 之 Metronic 模板的学习之路 - (6)自定义和扩展
  12. 命令窗 创建vue 项目过程
  13. thinkphp 调用wsdl接口实例化SoapClient抛出异常
  14. 《批创思维导论》网课章节测验及答案
  15. Zynq-Linux移植学习笔记之47-PL部分spi flash文件系统挂载
  16. Mac软件打开时闪退怎么办?苹果电脑软件崩溃解决办法
  17. libfdk_aac介绍
  18. 尼古拉斯·凯奇:名门传奇
  19. Hung-yi Li Machine Learning 2019 Task1
  20. 解决Pycharm绘图报错:Error: failed to send plot to http://127.0.0.1:63342

热门文章

  1. java 中的单引号报错_shell中的单引号,双引号,反引号
  2. java集合进行排序的两种方式
  3. mysql中数据类型的长度
  4. 湖南工大11级C语言网上作业,湖南工大11级C语言网上作业之《最简单的程序设计》.docx...
  5. 应用商店应用计算机,基于中国虹计算机的应用商店的设计与实现
  6. c语言dfs算法全排列代码,c语言dfs解决全排列问题
  7. signature=1610c03482e0c6557f7ec99f0ceeae85,Vpdes Permit No. Va006557
  8. c语言加密shell脚本,shell脚本加密
  9. C语言挂载文件夹,使用autofs 按需挂载共享目录
  10. pythoncsv格式列变换_用Python将csv行转换为列