与Python 3.1.x相比,Python 3.2非常慢



我通读了Python 3.2的变化,并了解到它比3.1有了许多改进。然而,我的完全相同的代码在3.2上运行时没有任何修改,比在3.1.3上运行时慢10倍以上

Python 3.2花了6分钟将文件的二进制内容传输到物理设备,然后接收并在屏幕上打印接收到的数据,而在同一台PC上执行完全相同的场景,Python 3.1.3只需要30秒。

我用Python 3.1.2从头开始开发我的代码,20%的代码使用ctypes通过带有USB/PCI设备的windows驱动程序执行事务,所以我不认为性能下降与向后兼容性有任何关系。在我的应用程序中,我创建了四个线程实例。线程子类,每个子类处理系统上的一个PCI或USB设备。我怀疑的是3.2的ctypes性能比以前更差了,或者有更多的线程。线程,我必须使用它来获得我想要的多线程性能。如果有人能帮我遮一下灯,我将不胜感激

=========================================

更diagopnistic

我减少了要发送和接收的数据量

python 3.1.3需要3秒才能完成,如下面的系统资源监视器截图http://img62.imageshack.us/img62/5313/python313.png

python 3.2大约需要1分钟才能完成,如下图所示:http://img197.imageshack.us/img197/8366/python32.png

我的电脑是一个单核英特尔P4与2gb的RAM,所以我认为我们可以排除GIL因素多核处理器。

我使用yappi来分析多次运行,以平均3.1.3和3.2的性能结果。我发现线程和ctypes在Python 3.2中执行得很糟糕。

这是访问python包

的标准windows二进制文件提供的线程安全队列。
on 3.1.3
name                                 #n       tsub       ttot       tavg
C:Python31libqueue.py.qsize:86    46070    1.352867   4.234082   0.000092
C:Python31libqueue.py._get:225    8305     0.012457   0.017030   0.000002
C:Python31libqueue.py.get:167     8305     0.635926   1.681601   0.000202
C:Python31libqueue.py._put:221    8305     0.016156   0.020717   0.000002
C:Python31libqueue.py.put:124     8305     0.095320   1.138560   0.000137
on 3.2
name                                 #n       tsub       ttot       tavg
C:Python32libqueue.py.qsize:86    252168   4.987339   15.229308  0.000060
C:Python32libqueue.py._get:225    8305     0.030431   0.035152   0.000004
C:Python32libqueue.py.get:167     8305     0.303126   7.898754   0.000951
C:Python32libqueue.py._put:221    8305     0.015728   0.020928   0.000003
C:Python32libqueue.py.put:124     8305     0.143086   0.431970   0.000052

线程性能在Python 3.2上非常糟糕

另一个例子。这个函数只是通过ctypes模块调用windows USB驱动程序中的API,并从USB设备请求16位数据

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对于我的应用程序来说似乎是一场灾难

没有明显的理由。你需要对应用程序进行分析,看看究竟是什么占用了这些额外的时间。

最新更新