为什么?Python 3 中的 json 库是用 C/C++ 还是其他低级语言编写的?

众所周知,C/C++在很多情况下都比蟒蛇快。我朝这个方向做了一个测试。

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

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

运行几次后,我震惊地发现,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;

}

和蟒蛇:


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))

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


qq_花开花谢_0
浏览 135回答 2
2回答

白衣染霜花

一个写得很差的图书馆,不管它写成什么语言,都可以给你带来巨大的速度。C++中有一些专门的和高度优化的JSON解析器,包括快速json和simdjson,请参阅最近的比较:https://lemire.me/blog/2020/03/31/we-released-simdjson-0-3-the-fastest-json-parser-in-the-world-is-even-better/

30秒到达战场

众所周知,C/C++在很多情况下都比蟒蛇快。在很多情况下,并非总是如此。当然,如果你的C/C++代码写得很糟糕,它可以像你想要的那样慢。我使用内置的json库在python中执行了测试,C++使用外部的nlohmann JSON库进行了测试。JSON 库比其他替代方法慢。它绝对有可能比CPython的实现慢。如果您需要速度,请使用另一个库。nlohmann话虽如此,请注意,基准测试很难。@Jesper和@idclev提到的情况可能是,在编译C++代码时,您只是缺少优化。json库是用任何低级语言编写的,这是性能的主要原因,还是只是纯粹的python?是的,正如@jonrsharpe指出的那样,CPython实现是用C编写的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python