python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。
很多人做效能測試,吧print開啟,吧log調到debug級別並使用了streamhandler,那就會瘋狂列印到控制檯。
列印控制檯會影響程式碼效能嗎?這是毫無疑問的,python print會嚴重影響python效能。
有很多人對分散式函式排程框架做效能測試,但在消費函式裡面進行print並且框架日子級別沒有設為INFO,造成框架的效能結果嚴重大幅度下降,每次都要解釋很久print是io行為,會嚴重影響程式碼的效能。
下面就來看證明吧。
呼叫10萬次add函式求和,使用嚴謹的控制變數法測試,測試用例如下:
1.pycahrm中呼叫10萬次求和,但不列印結果,統計執行時間 (主要是測試不列印結果和列印少量字串和列印很長字串 的影響)
2.pycahrm中呼叫10萬次求和,列印20個文字左右的長度來顯示求和結果,統計執行時間(主要是測試不列印結果和列印少量字串和列印很長字串 的影響)
3.pycahrm中呼叫10萬次求和,列印500個文字左右的長度來顯示求和結果,統計執行時間(主要是測試不列印結果和列印少量字串和列印很長字串 的影響)
4.在cmd,把cmd視窗用滑鼠縮放調成中等大小,寬10cm高10cm,執行10萬次求和,列印500個文字左右的長度來顯示求和結果,統計執行時間(主要是用來測試不同視窗大小渲染print的影響)
5.在cmd,把cmd視窗用滑鼠縮放調成很小,寬3cm高3cm,執行10萬次求和,列印500個文字左右的長度來顯示求和結果,統計執行時間(主要是用來測試不同視窗大小渲染print的影響)
6.在cmd,把cmd視窗用滑鼠縮放調成最大化,執行10萬次求和,列印500個文字左右的長度來顯示求和結果,統計執行時間(主要是用來測試不同視窗大小渲染print的影響,並且可以對比pycahrm執行時的耗時)
測試程式碼如下:
import time def add(x,y): return x +y t1 = time.time() for i in range(100000): # 只調用求和函式不列印結果,統計執行時間 # add(i, i * 2) # 列印20個文字左右的長度來顯示求和結果,統計執行時間 # print(f'''{time.strftime("%H:%M:%S")} {i} + {i * 2} = {add(i, i * 2)}''')# 列印500個文字左右的長度來顯示求和結果,統計執行時間 print(f'''python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 python程式碼中瘋狂print影響python效能嗎?print是io嗎?結論是做程式碼效能測試千萬不要瘋狂print,否則結果嚴重不準確,效能大幅下降。 {time.strftime("%H:%M:%S")} {i} + {i*2} = {add(i,i*2)}''') print("耗時:",time.time() -t1)
執行結果:
1.pycahrm中呼叫10萬次求和,但不列印結果,統計執行時間 (主要是測試不列印結果和列印少量字串和列印很長字串 的影響),耗時0.02秒
2.pycahrm中呼叫10萬次求和,列印20個文字左右的長度來顯示求和結果,統計執行時間(主要是測試不列印結果和列印少量字串和列印很長字串 的影響),耗時0.89秒
3.pycahrm中呼叫10萬次求和,列印500個文字左右的長度來顯示求和結果,統計執行時間(主要是測試不列印結果和列印少量字串和列印很長字串 的影響),耗時4.11
4.在cmd,把cmd視窗用滑鼠縮放調成中等大小,寬10cm高10cm,執行10萬次求和,列印500個文字左右的長度來顯示求和結果,統計執行時間(主要是用來測試不同視窗大小渲染print的影響),耗時 1400秒
5.在cmd,把cmd視窗用滑鼠縮放調成很小,寬3cm高3cm,執行10萬次求和,列印500個文字左右的長度來顯示求和結果,統計執行時間(主要是用來測試不同視窗大小渲染print的影響),耗時7100秒
6.在cmd,把cmd視窗用滑鼠縮放調成最大化,執行10萬次求和,列印500個文字左右的長度來顯示求和結果,統計執行時間(主要是用來測試不同視窗大小渲染print的影響,並且可以對比pycahrm執行時的耗時),耗時300秒
解釋一下什麼叫 cmd視窗大小:
可以通過滑鼠拉伸改變cmd視窗大小。
二、實驗結論:
通過實驗的結果得出結論:
pycahrm下列印短字串結果比不列印結果耗時增加了40倍。
pycahrm下列印長字串結果比列印短字串耗時增加了5倍。
cmd視窗最大化,列印長字串比pycahrm列印長字串結果耗時增加了近100倍
cmd視窗調整成3cm大小時候,比cmd視窗最大化,列印長字串耗時增加了25倍
cmd視窗調整成10cm大小時候,比cmd視窗最大化,列印長字串耗時增加了5倍
充分的說明瘋狂的進行print會非常顯著嚴重影響程式碼的執行速度,print列印到控制檯的速度會受到終端渲染效能的影響,
pycahrm是對程式碼輸出優化了,會明顯的批量快取輸出,效能明顯好於在cmd視窗中瘋狂print。
cmd視窗最大化時候,渲染輸出效能最好,cmd視窗調成最小時候,print效能最差。
所以有的人在測我的分散式函式排程框架效能時候,我建議在消費函式中別print。並且 @task_deco裝飾器
中設定log_level=20 ,20就是常量logging.INFO的值,因為這樣會大量減少螢幕控制檯的輸出,會使框架消費效能大幅度提高。瘋狂print對效能測試造成嚴重不準確。
反對極端面向過程程式設計思維方式,喜歡面向物件和設計模式的解讀,喜歡對比極端面向過程程式設計和oop程式設計消耗程式碼程式碼行數的區別和原因。致力於使用oop和36種設計模式寫出最高可複用的框架級程式碼和使用最少的程式碼行數完成任務,致力於使用oop和設計模式來使部分程式碼減少90%行,使絕大部分py檔案最低減少50%-80%行的寫法。