openpyxl3 0官方文件(3) 效能分析

2021-10-07 15:23:23 字數 3476 閱讀 5592

openpyxl在平衡功能和效能上做來很大努力。毫無疑問,我們更關注功能而不是優化:因為一旦完成api,效能優化也就變得更容易。與其他庫和應用程式相比,記憶體佔用率很高,大約是原始檔案大小的50倍。例如,對於50mb的excel檔案,記憶體將占用2.5gb。由於許多用例只涉及讀取或寫入檔案,加上optimized模式的應用,這將不是問題。

所有的測試基準都是綜合的,並且非常依賴於硬體,但是仍然可以得出結論。

測試**可以調整為使用更多工作表或者調整字串資料的比例。因為使用的python版本也會顯著影響效能,所以執行指令碼也可以用於在tox環境中測試不同版本的python。

寫入效能與著名的xlsxwriter進行了比較

versions:

python:

3.6.9

openpyxl:

3.0.1

xlsxwriter:

1.2.5

dimensions:

rows =

1000

cols =

50 sheets =

1 proportion text =

0.10

times:

xlsxwriter :

0.59

xlsxwriter (optimised)

:0.54

openpyxl :

0.73

openpyxl (optimised)

:0.61

versions:

python:

3.7.5

openpyxl:

3.0.1

xlsxwriter:

1.2.5

dimensions:

rows =

1000

cols =

50 sheets =

1 proportion text =

0.10

times:

xlsxwriter :

0.65

xlsxwriter (optimised)

:0.53

openpyxl :

0.70

openpyxl (optimised)

:0.63

versions:

python:

3.8.0

openpyxl:

3.0.1

xlsxwriter:

1.2.5

dimensions:

rows =

1000

cols =

50 sheets =

1 proportion text =

0.10

times:

xlsxwriter :

0.54

xlsxwriter (optimised)

:0.50

openpyxl :

1.10

openpyxl (optimised)

:0.57

讀取效能測試使用的以前的bug report,與xlrd庫進行比較。xlrd主要用於字尾為.xls舊的biff檔案格式檔案,對xlsx的支援有限。

基準測試的**執行結果顯示,在處理檔案時選擇正確選項很重要。當禁用外部鏈結時,openpyxl將停止開啟鏈結工作表的快取副本。

兩個庫之間的乙個主要區別是openpyxl的read-only模式會立刻開啟乙個工作簿,使其適合於多個程序,也顯著地減少了記憶體使用。xlrd不會自動將日期和時間轉換為python日期時間而是對單元格進行注釋,但在客戶端**中這樣做會顯著降低效能。

versions:

python:

3.6.9

xlread:

1.2.0

openpyxl:

3.0.1

openpyxl, read-only

workbook loaded 1.14s

optimizationdata 23.17s

output model 0.00s

>>data>>

0.00s

store days 0

%23.92s

store days 100

%17.35s

total time 65.59s

0 cells in total

versions:

python:

3.7.5

xlread:

1.2.0

openpyxl:

3.0.1

openpyxl, read-only

workbook loaded 0.98s

optimizationdata 21.35s

output model 0.00s

>>data>>

0.00s

store days 0

%20.70s

store days 100

%16.16s

total time 59.19s

0 cells in total

versions:

python:

3.8.0

xlread:

1.2.0

openpyxl:

3.0.1

openpyxl, read-only

workbook loaded 0.90s

optimizationdata 19.58s

output model 0.00s

>>data>>

0.00s

store days 0

%19.35s

store days 100

%15.02s

total time 54.85s

0 cells in total

讀取工作表相當耗費cpu,這限制了並行化帶來的好處。但是,如果您主要是想使用工作簿的內容,那麼可以使用openpyxl的read-only模式,開啟工作簿的多個例項,同時利用多個cpu。

示例**使用與讀取測試相同的原始檔,由於建立了額外的python程序,效能可以輕鬆地擴充套件並且開銷很小。

parallised read

workbook loaded 1.12s

>>data>>

2.27s

output model 2.30s

store days 100

%37.18s

optimizationdata 44.09s

store days 0

%45.60s

total time 46.76s

django官方文件3 0學習筆記 02

初試api 進入互動式python命令列 設定管理員 時區配置time zone utc use tz truetime zone asia shanghai use tz false資料庫配置 django支援資料庫 postgresql mysql oracle sqlite3 database...

C 3 0 語言定義文件(微軟官方版)正式發布!

2007年08月25日 23 20 00 c 3.0 語言定義文件 微軟官方版 正式發布 如果想精通一門程式語言,你就需要像律師研究法律條款一樣來研究這門語言的定義文件 language specification,簡稱langspec 靜悄悄地,c 3.0語言定義文件在經過眾多社群愛好者的revi...

C 3 0 語言定義文件(微軟官方版)正式發布!

c 3.0 語言定義文件 微軟官方版 正式發布 如果想精通一門程式語言,你就需要像律師研究法律條款一樣來研究這門語言的定義文件 language specification,簡稱langspec 靜悄悄地,c 3.0語言定義文件在經過眾多社群愛好者的review後,於2007 08 20號面世了!作...