PyGooglePlusをプロファイリングしてみた
現在noseでテストコードを書いてるのだけれど、ついでにどこが足を引っ張っているのか知るためにnose経由でプロファイリングしてみた。
準備
- Graphizをインストール
- $ pip install https://guppy-pe.svn.sourceforge.net/svnroot/guppy-pe/trunk/guppy
- $ pip install pbp.scripts
テストコードをtests.pyとして書いたら
$ nosetests –with-profile –profile-stats-file nose.prof tests.py
$ hotshot2dot nose.prof| dot -Tpng -o profile.png
を実行して出力した画像とにらめっこ
今回はApiHandler.get_user_info()のみのテストコードで行った。 またBeautifulSoup4がリリースされていることを知り、lxmlあれば早くなるよって言ってたので、3と4の2パターンで行った。
以下が結果である。
上がBS3、下がBS4であるが結果としては、lxmlを使っているはずのBS4のほうが遅い結果になっている。処理が余計にかかっている印象。 いずれ改善されると思うけど、特に必要性を感じないのであればBS3を使っておけばいいと思う。
それにしてもchardetの処理が足を引っ張りすぎている気がする。それと自分のライブラリ(苦笑)
※ この結果を出したときは指定していなかったが、文字コードが固定で既知なら,from_encoding引数をBeautifulSoupに指定してあげるのもいいと思うよ。 実験的にPyGooglePlusにも使用してみたら、5分の1くらい処理時間が縮まりました。 省いてるから当然だね。 だとしてもC拡張のchardetが欲しくなるよね。だれか作らないかな
参考: