Python 3は今日はそれほど遅くありません。 私の仕事-Webアプリケーション開発-では、Python 3の最初のリリースはおおよそPython 2.5.xと同等であると推定されます。これは、pystoneやその他の抽象的な次元で評価するよりもはるかに重要です。
テスト#1:pystone
pystoneに関しては、私が使用している古いユニプロセッサUnixマシンでの結果は次のとおりです。
$ python2.5 /usr/local/lib/python2.5/test/pystone.py
Pystone(1.1) time for 50000 passes = 1.75781
This machine benchmarks at 28444.4 pystones/second
$ python2.6 /usr/local/lib/python2.6/test/pystone.py
Pystone(1.1) time for 50000 passes = 1.46094
This machine benchmarks at 34224.6 pystones/second
$ python3.0 /usr/local/lib/python3.0/test/pystone.py
Pystone(1.1) time for 50000 passes = 1.85938
This machine benchmarks at 26890.8 pystones/second
テスト#2:Webアプリケーション
Webブラウジングの(粗雑ではありますが)バインディングテストは、同じ古いマシンでwikiページを取得することです。一方、gvimと他のいくつかのアプリケーションも実行されています。
ab -n 1000 127.0.0.1:8002/qwiki/foo/
Req/second
Python 2.5 174.79
Python 2.6 204.29
Python 3.0 173.49
テスト#3:Webフレームワークテンプレート
このテストは、 Genshiパッケージに含まれているテンプレートテストに基づいており、timeitモジュールを使用して、次のQpyテンプレートを使用して大きなhtmlテーブルの作成を開始する10時間の平均時間値をカウントします。
# this is to provide a Qpy template for use in comparison # with the Genshi "bigtable" benchmark. table = [dict(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10) for x in range(1000)] def qpy_template:xml(): '<table>' for row in table: '<tr>' for col in row.values(): '<td>%s</td>' % col '</tr>' '</table>'
Python 2.6およびPython 3.0でパフォーマンスが向上したモジュールはQpyだけではないことがわかります。また、一部のモジュールのパフォーマンスを以前のレベルに戻すための最適化が行われると確信しています。
$ python2.5 bigtable.py
ElementTree 736.43 ms
cStringIO 36.46 ms
StringIO 141.10 ms
list concat 22.73 ms
Qpy Template 129.35 ms
$ python2.6 bigtable.py
ElementTree 656.99 ms
cStringIO 30.85 ms
StringIO 131.95 ms
list concat 16.37 ms
Qpy Template 39.54 ms
$ python3.0 bigtable.py
ElementTree 449.60 ms
StringIO 138.03 ms
list concat 21.70 ms
Qpy Template 36.36 ms
おわりに
誰かがPython 3.0ではなくPython 2.xを選択するのには十分な理由がありますが、ほとんどの開発者にとってパフォーマンスはそれらの1つではありません。