PyGooglePlusをプロファイリングしてみた


現在noseでテストコードを書いてるのだけれど、ついでにどこが足を引っ張っているのか知るためにnose経由でプロファイリングしてみた。

準備

テストコードを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が欲しくなるよね。だれか作らないかな

参考: