Python 反序列化 json 比 C++ 更快。为什么?Python 3中的json库是用C/C++或其他低级语言编写的吗?

ale*_*lex 2 c++ python json

C/C++ 因在许多情况下比 python 更快而闻名。我朝这个方向做了一个测试。

我有一个包含 2200 行的大型(美化的)JSON 文件。测试包括读取文件、反序列化内存中的数据(我使用字典作为数据结构)并显示内容。

我使用内置json库在 python 中执行测试,并使用外部nlohmann JSON 库在 C++ 中执行测试。

运行几次后,我震惊地发现 C++ 需要 0.01 秒,而 Python 3 大约需要 0.001 秒,几乎快了 10 倍!

我在文档中进行了搜索,但没有找到有关编写json库时使用的内容的信息。

C++:

#include <iostream>
#include <string.h>
#include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/ptree.hpp>
#include "nlohmann/json.hpp"
using namespace std;
using json = nlohmann::json;
namespace pt = boost::property_tree;
#include <ctime>

int main()
{

    ifstream input;
    input.open("input.json");

    json json_data;

    input >> json_data; 

    cout << json_data << endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

和Python:

import json
from time import time

t1 = time()
with open('output.json','r+') as f:
    f = json.load(f)

    print(f)
t2 = time()
elapsed = t2 - t1

print('elapsed time: '+str(elapsed))
Run Code Online (Sandbox Code Playgroud)

最后一个问题,jsonPython 库是用任何低级语言编写的(这是性能的主要原因),还是只是纯 Python?

小智 5

一个写得不好的库,无论它是用什么语言编写的,都会给你带来极快的速度。

C++ 中有一些专门且高度优化的 JSON 解析器,包括 Rapidjson 和 simdjson,请参阅最近的比较:

https://lemire.me/blog/2020/03/31/we-released-simdjson-0-3-the-fastest-json-parser-in-the-world-is-even-better/