我通過閱讀Python 3.2的更改並瞭解到它已經比3.1版做了很多改進。然而,我在3.2上運行零修改的完全相同的代碼比在3.1.3上運行我的代碼時慢了10倍以上。與Python 3.1.x相比,Python 3.2速度非常慢
然後,使用Python 3.2六分鐘將文件的二進制內容傳輸到物理設備,然後接收和打印出屏幕上接收到的數據,當在同一臺PC上完全相同的場景僅用30秒就可以用Python 3.1.3執行。
我從頭開始用Python 3.1.2開發我的代碼,20%的代碼使用ctypes通過帶有USB/PCI設備的Windows驅動程序執行事務,所以我不認爲這種性能與後向有什麼關係兼容性。在我的應用程序中,我創建了四個threading.Thread子類的實例,每個子類都處理系統上的一個PCI或USB設備。我懷疑的事情是,3.2的ctypes性能比以前更糟糕,或者線程更多。線程必須與我一起玩,以獲得我想要的多線程性能。將不勝感激,如果任何人都可以爲我遮擋一些燈光
================================== =======
更diagopnistic
我降低如本系統資源監視器屏幕截圖被髮送&接收
蟒3.1.3花費3秒鐘,以comelete數據量http://img62.imageshack.us/img62/5313/python313.png
python 3.2花費大約1分鐘完成,如圖所示系統資源監視器屏幕截圖http://img197.imageshack.us/img197/8366/python32.png
我的電腦是帶有2 GB內存的單核英特爾P4,所以我認爲我們可以排除多核處理器的GIL因素。
我用yappi來分析多次運行來平均3.1.3和3.2的性能結果。我發現線程和ctypes在Python 3.2上執行的很糟糕。
提供Python包的標準的Windows二進制
on 3.1.3
name #n tsub ttot tavg
C:\Python31\lib\queue.py.qsize:86 46070 1.352867 4.234082 0.000092
C:\Python31\lib\queue.py._get:225 8305 0.012457 0.017030 0.000002
C:\Python31\lib\queue.py.get:167 8305 0.635926 1.681601 0.000202
C:\Python31\lib\queue.py._put:221 8305 0.016156 0.020717 0.000002
C:\Python31\lib\queue.py.put:124 8305 0.095320 1.138560 0.000137
on 3.2
name #n tsub ttot tavg
C:\Python32\lib\queue.py.qsize:86 252168 4.987339 15.229308 0.000060
C:\Python32\lib\queue.py._get:225 8305 0.030431 0.035152 0.000004
C:\Python32\lib\queue.py.get:167 8305 0.303126 7.898754 0.000951
C:\Python32\lib\queue.py._put:221 8305 0.015728 0.020928 0.000003
C:\Python32\lib\queue.py.put:124 8305 0.143086 0.431970 0.000052
線程明智性能這是訪問線程安全隊列是剛上的Python 3.2
另一個例子出奇的差。此功能只需通過ctypes的模塊調用在Windows USB驅動程序API,並要求16位數據從USB設備
on 3.1.3
name #n tsub ttot tavg
..ckUSBInterface.py.read_register:14 1 0.000421 0.000431 0.000431
on 3.2
name #n tsub ttot tavg
..ckUSBInterface.py.read_register:14 1 0.015637 0.015651 0.015651
,你可以看到,所花費的時間是Python的3.2
糟糕的30倍以上Python的3.2似乎是我的應用程序
你最終追查這是什麼?這可能是Python的一種迴歸,它似乎不太可能會改變語言行爲,但你可能會仔細看看是否可能出現這種情況。 – 2011-06-15 12:05:24
我結束了從所有機器上卸載Python 3.2並重新安裝3.1.3 – SCM 2011-07-26 01:42:39