主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Python: PyPyを試してみる

                
tags: python pypy
 PyPyがバージョンアップしたということを知った。ぼくはこれまでPyPyがどんなものかおおよそ知っていたぐらいで、使ったことはなかった。調べてみたところ、Python 2.7.6と最新のPyPy 2.3はバージョン番号は違うが高い互換性をもっているらしく、DjangoやFlaskなどの有名どころも難なく動くということだった。興味がわいたので試してみる。環境はWindows 7(64bit)でおもに行った。

 PyPyとはJITを備えたPythonということでいいのか・・・ とりあえずPythonの標準的実装であるCPythonから高速化を図ったりしたもので、成果の一つとしてパフォーマンスがアピールされている。対応プラットフォームもLinuxからWindows、Raspbianもと幅広い。
http://speed.pypy.org/
なんだかPyPyでWebフレームワークを使った場合はパフォーマンスアップがとても期待できそうなので試してみる。

 以前書いたTornado + MongoDBのブログをPyPyで動かしてみる。そしてトップページへリクエストを送りまくってみる。トップページではMongoDBへの問い合わせやテンプレート処理が行われている。
14051501.jpg
import urllib2
import time

t = time.time()
for i in xrange(0, 1000):
urllib2.urlopen('https://localhost:8890/')

print time.time() - t

 
 PyPyで動かしているTornado+MongoDBのブログトップページに1000回リクエストをぶん投げてみる。何秒で終わるかためしたところ、25秒から40秒のあいだで適当な値を取り安定しなかった。
 一方でPythonで動かしたブログに同様のことをしたところ、おおよそ20秒程度で安定した……
 期待と逆の結果が出てしまったので原因など要検証。HTTPリクエストに対してHello!という文字列を返すだけのリクエストハンドラを用意して同様に時間計測をしたら、Pythonで2.6秒程度、PyPyで1.9秒から4.0秒のあいだになった。速いこともあるけど安定しない……

 単純な処理のパフォーマンスを計測してみる。forループで加算を繰り返し実行してみる。
import time

t = time.time()
a = 0
for x in range(1, 100000):
a += x
print time.time() - t

これはPythonで0.03秒、PyPyで0.01秒でほぼ安定し、期待どおりの結果となった。

 PyPyはパフォーマンスがいいというので、Tornadoとともに試してみたが期待するパフォーマンスの向上は得られなかった。けど単純な計算処理のみではPythonの三倍の速さをたたき出した。実際にPyPyを使うかは検討が必要なようだ。
 ちなみに今回はTornado, PyMongo, Motorをモジュールとして利用した。これらは書き換えなくそのままでPyPyで動いた。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。