나는 Python 3.2를 읽었으며, 3.1보다 많은 개선이 있음을 이해한다. 그러나 3.2에서 실행되는 제로 수정을 사용하는 똑같은 코드는 3.1.3에서 코드를 실행할 때보 다 10 배 이상 느립니다.Python 3.2가 Python 3.1.x와 비교할 때 매우 느리다.
파일의 이진 내용을 물리적 장치로 전송하는 데 6 분이 걸렸습니다. 동일한 PC에서 똑같은 시나리오가 파이썬 3.1.3으로 실행하는 데 30 초 밖에 걸리지 않을 때 수신 된 데이터를 화면에 출력합니다.
나는 처음부터 내 코드를 Python 3.1.2에서 개발했으며 코드의 20 %는 ctypes를 사용하여 USB/PCI 장치가있는 Windows 드라이버를 통해 트랜잭션을 수행하므로이 성능 저하가 뒤로 이동하는 것과 관련이 없다고 생각합니다 적합성. 내 응용 프로그램에서는 스레딩의 네 가지 인스턴스를 만듭니다. 스레드 하위 클래스는 각각 시스템의 PCI 또는 USB 장치 하나를 처리합니다. 내가 의심하는 것은 3.2의 ctypes 성능이 그 어느 때보 다 악화되었거나 내가 원하는 멀티 스레딩 성능을 정확하게 얻기 위해 스레딩해야하는 스레드가 더 많다는 것입니다. 누구나 나를 위해 약간의 빛을 그늘지게 할 수 있으면 많이 감사 할 것입니다.
================ =======
더 diagopnistic
I이 시스템 자원 모니터 화면에 나타낸 바와 같이 & 파이썬 3.1.3 comelete 3 초를 소비 를받은 전송되는 데이터의 양을 감소http://img62.imageshack.us/img62/5313/python313.png
python 3.2는 다음과 같이 완료되는 데 약 1 분이 소요됩니다. 시스템 리소스 모니터 스크린 샷 http://img197.imageshack.us/img197/8366/python32.png
내 PC는 2GB RAM이있는 단일 코어 Intel P4이므로 여러 코어 프로세서에 대해 GIL 팩터를 배제 할 수 있다고 생각합니다.
필자는 yappi를 사용하여 3.1.3과 3.2 모두에서 성능 결과를 평균화하기 위해 다중 실행을 프로파일 링했습니다. 스레드 및 ctypes가 파이썬 3.2에서 잘못 수행 된 것을 볼 수 있습니다.
파이썬 패키지의 표준 윈도우 바이너리
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
실이 많다는 성능을 제공하는이 액세스하는 스레드 안전 큐는 미친 듯이 나쁜
또 다른 예 파이썬 3.2입니다. 이 기능은 단순히하는 ctypes 모듈을 통해 윈도우 USB 드라이버의 API를 호출하고 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
당신이 볼 수있는 데이터의 16 개 비트를 요청, 걸리는 시간은
파이썬 3.2보다 30 배 더 나쁘다 파이썬 3.2는 내 응용 프로그램에 대한 재앙처럼 보입니다.
이것이 무엇인지 추적 했습니까? 파이썬에서 회귀가 될 수도 있지만, 언어의 동작이 바뀌지는 않을 것으로 보이지만, 이것이 사실 일 수 있는지주의 깊게 살펴보아야합니다. –
모든 컴퓨터에서 Python 3.2를 제거하고 3.1.3 – SCM