准生证在哪里办,鸡柳的做法,证监会-热图,每日新闻热图

admin 2019-05-16 阅读:153

​运用JSON越多, 你就越有或许遇到JSON编码或解码瓶颈。Python的内置库也不错, 可是还有多个更快的JSON库可用: 怎么挑选运用哪一个呢?

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

  1. 一个“快速的JSON库”对不同的人意味着不同的东西,由于它们的运用形式不同。
  2. 速度并不是全部——你或许还会关怀其他一些工作,比方安全性和可定制性。

因而,为了协助你依据需求挑选最快的JSON库,我想在这儿共享一下我为Python挑选一个快速JSON库所阅历的进程。你能够运用这个进程来挑选最适合你的特殊需求的库:

  1. 保证的确有问题需求用到JSON库来处理。
  2. 界说基准。
  3. 依据附加要求来过滤。
  4. 对剩余的候选者进行基准测验。

进程#1: 你的确需求一个新的JSON 库吗?

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

在我的比方中,我从我的原因日志库Eliot(causal logging library Eliot)的基准测验中学到了这一点,它标明JSON编码占用了大约25%的用于生成音讯的CPU时刻。我能得到的最大加快是比原先运转快33%(假如JSON编码时刻变为零),但那是一个足够大的时刻块,运用最快的JSON库会让这个时刻块减小到最低。

进程 #2: 界说基准

假如你检查各种JSON库的基准页面,你会发现它们都会评论怎么处理各种不同的音讯。可是,这些音讯并不一定与你的运用相关。其他人会常常丈量十分大型音讯,但在我的比方中,我只关怀小型音讯。

所以你想要提出一些契合你的特定运用形式的办法:

  1. 你关怀编码、解码,仍是两者都关怀?
  2. 你运用的是小型音讯仍是大型音讯?
  3. 典型的音讯是什么样的?

在我的比方中,我首要关怀的是编码小型音讯,即由Eliot生成的日志音讯的特定结构。依据一些实在的日志,我收拾出了以下示例音讯:

进程 #3: 依据附加要求来过滤

功能并不是全部——你或许还会关怀其他一些工作。在我的比方中:

  1. 安全性/抗溃散性:日志音讯能够包括来自不行信源的数据。假如JSON编码器在不良数据上溃散,这对可靠性或安全性都不好。
  2. 自界说编码: Eliot支撑自界说JSON编码,因而您能够序列化其他类型的Python目标。有些JSON库支撑这一点,有些则不支撑。
  3. 跨渠道: 运转在Linux、macOS和Windows上。
  4. 保护: 我不想依靠一个没有得到积极支撑的库。

我考虑的库有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吗? 不一定。你或许有不同的要求,你的基准测验也或许不同——例如,你或许需求解码大型文件。

要害点是进程: 找出你的特定要求,比方功能以及其他方面,然后挑选最适合你的需求的库。

英文原文:https://pythonspeed.com/articles/faster-json-library/ 译者:浣熊君( ・᷄৺・᷅ )