亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么?Python 3 中的 json 庫是用 C/C++ 還是其他低級語言編寫的?

為什么?Python 3 中的 json 庫是用 C/C++ 還是其他低級語言編寫的?

qq_花開花謝_0 2022-09-27 10:44:11
眾所周知,C/C++在很多情況下都比蟒蛇快。我朝這個方向做了一個測試。我有一個包含2200行的大型(美化)JSON文件。測試包括讀取文件,反序列化內存中的數據(我使用字典作為數據結構)和顯示內容。我使用內置的 json 庫在 python 中執行了測試,C++使用外部 nlohmann JSON 庫執行了測試。運行幾次后,我震驚地發現,C++需要0.01秒,Python 3大約需要0.001秒,這幾乎是10倍!我在文檔中搜索了一下,但沒有找到有關編寫庫時使用的內容的信息。jsonC++:#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 jsonfrom time import timet1 = time()with open('output.json','r+') as f:    f = json.load(f)    print(f)t2 = time()elapsed = t2 - t1print('elapsed time: '+str(elapsed))最后一個問題,Python庫是用任何低級語言編寫的,這是性能的主要原因,還是只是純粹的Python?json
查看完整描述

2 回答

?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

一個寫得很差的圖書館,不管它寫成什么語言,都可以給你帶來巨大的速度。

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/


查看完整回答
反對 回復 2022-09-27
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

眾所周知,C/C++在很多情況下都比蟒蛇快。

在很多情況下,并非總是如此。

當然,如果你的C/C++代碼寫得很糟糕,它可以像你想要的那樣慢。

我使用內置的json庫在python中執行了測試,C++使用外部的nlohmann JSON庫進行了測試。

JSON 庫比其他替代方法慢。它絕對有可能比CPython的實現慢。如果您需要速度,請使用另一個庫。nlohmann

話雖如此,請注意,基準測試很難。@Jesper和@idclev提到的情況可能是,在編譯C++代碼時,您只是缺少優化。

json庫是用任何低級語言編寫的,這是性能的主要原因,還是只是純粹的python?

是的,正如@jonrsharpe指出的那樣,CPython實現是用C編寫的。


查看完整回答
反對 回復 2022-09-27
  • 2 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號