我通过阅读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