Python 3.2 の変更点を読み、3.1 よりも多くの改善が行われていることを理解しました。ただし、まったく同じコードを 3.2 で実行すると、コードを 3.1.3 で実行した場合よりも 10 倍以上遅くなります。
Python 3.2 では、ファイルのバイナリ コンテンツを物理デバイスに転送し、受信したデータを受信して画面に出力するのに 6 分かかりましたが、Python 3.1.3 では、まったく同じシナリオを同じ PC で実行するのに 30 秒しかかかりませんでした。
私は Python 3.1.2 でコードをゼロから開発しましたが、私のコードの 20% は ctypes を使用して、USB/PCI デバイスで Windows ドライバーを介してトランザクションを実行しているため、このパフォーマンスの低下は下位互換性とは何の関係もないと思います。私のアプリケーションでは、threading.Thread サブクラスの 4 つのインスタンスを作成し、それぞれがシステム上の 1 つの PCI または USB デバイスを処理します。私が疑うのは、3.2 の ctypes のパフォーマンスがこれまで以上に悪化したか、または、必要なマルチスレッド パフォーマンスを正確に得るために使用しなければならない threading.Thread が増えていることです。誰かが私のためにいくつかのライトを陰にすることができれば大歓迎です
=========================================
より診断的
送受信するデータ量を減らしました
このシステム リソース モニターのスクリーンショットhttp://img62.imageshack.us/img62/5313/python313.pngに示すように、python 3.1.3 は comelete に 3 秒を費やします。
このシステム リソース モニターのスクリーンショットhttp://img197.imageshack.us/img197/8366/python32.pngに示すように、python 3.2 は完了するまでに約 1 分かかります。
私の PC は 2 GB の RAM を搭載したシングル コア Intel P4 であるため、マルチ コア プロセッサの GIL 要因を除外できると思います。
yappi を使用して複数の実行をプロファイリングし、3.1.3 と 3.2 の両方でパフォーマンス結果を平均化しました。Python 3.2 では、スレッド化と ctypes のパフォーマンスが悪いようです。
これは、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 を呼び出し、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 は私のアプリケーションにとって大惨事のようです