成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python更快的解析JSON大文件

AlphaWallet / 3537人閱讀

摘要:提出問題今天用的庫解析一個的文件,發(fā)現(xiàn)一次都得要,這個在我開來,實在太慢了,有沒有更快的庫了先給出我的簡單測試結(jié)果大小測試方法文件內(nèi)容,然后一次一次解釋器多無多多多不成熟的結(jié)論最快方法一自帶的庫是用純代碼實現(xiàn)的,而對純代碼的加速效果比較好。

提出問題

今天用python的simplejson庫解析一個 >200MB 的JSON文件,發(fā)現(xiàn)一次decode/encode都得要 >10s,這個在我開來,實在太慢了,有沒有更快的庫了?

先給出我的簡單測試結(jié)果

json大?。?45MB

測試方法:read文件內(nèi)容,然后一次decode, 一次encode

解釋器 simplejson json ujson
pypy 40s多 10s
cpython 12s多 17s多 10s多

不成熟的結(jié)論: pypy+json最快

方法一:pypy+json

python自帶的JSON庫是用純python代碼實現(xiàn)的,而pypy對純python代碼的加速效果比較好。至于為什么,大家可以去google吧,很多文章解釋的很好。

方法二:UltraJson

我首先想到的用C庫來做JSON的解析,原因你懂的,而C語言有個JSON庫叫CJSON,于是用python+cjson在google里找到了UltraJson

UltraJson是作者用C語言實現(xiàn)的JSON庫,實際測試的效果是,整個encode的效率提升了2倍多。

使用方法:

安裝:pip instal ujson

    >>> import ujson
    >>> ujson.dumps([{"key": "value"}, 81, True])
    "[{"key":"value"},81,true]"
    >>> ujson.loads("""[{"key": "value"}, 81, true]""")
    [{u"key": u"value"}, 81, True]
    

并不是所有情況下都適合

根據(jù)下面的BenchMark,在double數(shù)組的情況下,yajl的encode速度是比UltraJson的,所以,如果你的JSON文件較小的話,其實無所謂哪個庫,如果是像我這樣的大JSON文件,可以根據(jù)下面的表選擇合適的JSON庫。

BenchMark

下面是作者給出的benchmark:表格中的數(shù)字是每秒的調(diào)用次數(shù),也就是說,數(shù)字越大,表示效率越高。

Versions:

CPython 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2]

blist : 1.3.6

simplejson: 3.8.1

ujson : 1.34 (0c52200eb4e2d97e548a765d5f089858c41967b0)

yajl : 0.3.5

? ujson yajl simplejson json
Array with 256 doubles ? ? ?
encode 3508.19 5742.00 3232.38 3309.09
decode 25103.37 11257.83 11696.26 11871.04
Array with 256 UTF-8 strings
encode 3189.71 2717.14 2006.38 2961.72
decode 1354.94 630.54 356.35 344.05
Array with 256 strings ? ? ?
encode 18127.47 12537.39 12541.23 20001.00
decode 23264.70 12788.85 25427.88 9352.36
Medium complex object
encode 10519.38 5021.29 3686.86 4643.47
decode 9676.53 5326.79 8515.77 3017.30
Array with 256 True values
encode 105998.03 102067.28 44758.51 60424.80
decode 163869.96 78341.57 110859.36 115013.90
Array with 256 dict{string, int} pairs
encode 13471.32 12109.09 3876.40 8833.92
decode 16890.63 8946.07 12218.55 3350.72
Dict with 256 arrays with 256 dict{string, int} pairs
encode 50.25 46.45 13.82 29.28
decode 33.27 22.10 27.91 10.43
Dict with 256 arrays with 256 dict{string, int} pairs, outputting sorted keys
encode 27.19 7.75 2.39
Complex object
encode 577.98 387.81 470.02
decode 496.73 234.44 151.00 145.16
Versions:

CPython 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4]

blist : 1.3.6

simplejson: 3.8.1

ujson : 1.34 (0c52200eb4e2d97e548a765d5f089858c41967b0)

yajl : 0.3.5

? ujson yajl simplejson json
Array with 256 doubles
encode 3477.15 5732.24 3016.76 3071.99
decode 23625.20 9731.45 9501.57 9901.92
Array with 256 UTF-8 strings
encode 1995.89 2151.61 1771.98 1817.20
decode 1425.04 625.38 327.14 305.95
Array with 256 strings
encode 25461.75 12188.64 13054.76 14429.81
decode 21981.31 17014.22 23869.48 22483.58
Medium complex object
encode 10821.46 4837.04 3114.04 4254.46
decode 7887.77 5126.67 4934.60 6204.97
Array with 256 True values
encode 100452.86 94639.42 46657.63 60358.63
decode 148312.69 75485.90 88434.91 116395.51
Array with 256 dict{string, int} pairs
encode 11698.13 8886.96 3043.69 6302.35
decode 10686.40 7061.77 5646.80 7702.29
Dict with 256 arrays with 256 dict{string, int} pairs
encode 44.26 34.43 10.40 21.97
decode 28.46 23.95 18.70 22.83
Dict with 256 arrays with 256 dict{string, int} pairs, outputting sorted keys
encode 33.60 6.94 22.34
Complex object
encode 432.30 351.47 379.34
decode 434.40 221.97 149.57 147.79
請移步我的博客了解更多

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40627.html

相關(guān)文章

  • flask 源碼解析:簡介

    摘要:簡介官網(wǎng)上對它的定位是一個微開發(fā)框架。另外一個必須理解的概念是,簡單來說就是一套和框架應(yīng)用之間的協(xié)議。功能比較豐富,支持解析自動防止攻擊繼承變量過濾器流程邏輯支持代碼邏輯集成等等。那么,從下一篇文章,我們就正式開始源碼之旅了 文章屬于作者原創(chuàng),原文發(fā)布在個人博客。 flask 簡介 Flask 官網(wǎng)上對它的定位是一個微 python web 開發(fā)框架。 Flask is a micro...

    megatron 評論0 收藏0
  • 架構(gòu)小試之IDL

    摘要:不合理的選型在后續(xù)維護上會帶來不小的麻煩。因此一般公司會將所有服務(wù)的文件統(tǒng)一維護。生成的數(shù)據(jù)結(jié)構(gòu)一般均支持序列化和反序列化,并且跨端跨語言。只支持,和數(shù)值三種結(jié)構(gòu),和支持相互嵌套,標(biāo)準(zhǔn)的的數(shù)值僅有這三種。只有大約的大小。本文轉(zhuǎn)載自我自己的博客,感興趣的老爺們可以關(guān)注~:https://www.miaoerduo.com/2021/11/16/arch-idl/為什么IDL的介紹也放在這里呢?...

    番茄西紅柿 評論0 收藏2637
  • AJAX學(xué)習(xí)筆記 - 通訊格式

    摘要:本文章記錄本人在深入學(xué)習(xí)中看書理解到的一些東西,加深記憶和并且整理記錄下來,方便之后的復(fù)習(xí)。格式數(shù)據(jù)極其的冗長。但是使用格式還是可能比實際的數(shù)據(jù)占用更多的空間。該字符串通過或者轉(zhuǎn)換為一個本地的對象。 本文章記錄本人在深入學(xué)習(xí)Javascirpt AJAX中看書理解到的一些東西,加深記憶和并且整理記錄下來,方便之后的復(fù)習(xí)。 避免使用 XML 沒有哪種格式從始至終比其他格...

    番茄西紅柿 評論0 收藏0
  • Python爬蟲學(xué)習(xí)路線

    摘要:以下這些項目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個步驟都能做到很優(yōu)秀的時候,你應(yīng)該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...

    liaoyg8023 評論0 收藏0
  • <轉(zhuǎn)> 從20秒到0.5秒:一個使用Rust語言來優(yōu)化Python性能案例

    摘要:的在調(diào)查發(fā)現(xiàn)問題在于的性能缺陷后,我們決定嘗試解析器的性能,這是為我們的工具編寫的。這意味著即使忽略任何優(yōu)化,只是將解析器替換為解析器就可以緩解我們的性能瓶頸。 注: 轉(zhuǎn)自 微信公眾號高可用架構(gòu):從20秒到0.5秒:一個使用Rust語言來優(yōu)化Python性能的案例 導(dǎo)讀:Python 被很多互聯(lián)網(wǎng)系統(tǒng)廣泛使用,但在另外一方面,它也存在一些性能問題,不過 Sentry 工程師分享的在關(guān)...

    Kahn 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<