Python 3パフォーマンス:気晴らし

私は言語のパフォーマンスに細心の注意を払うように無頓着でしたが、これは二度と起こりません。 私がしている仕事にとって、開発の生産性は言語自体のパフォーマンスよりもはるかに重要です。 Python 3が本番環境で使用されている最新の2.xリリース(2.5)よりも若干遅いことはまったく気になりません。 歴史から、Python開発者は最適化が得意であり、言語が安定しているため、3番目のブランチで多数の最適化を期待できます。





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つではありません。



All Articles