2008年12月17日水曜日

memo化につかうストレージとスピードup率

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
compilerモジュールとelementtreeを使って、pythonのcodeをparseしelementtreeを作るconverterを実装したが、結構遅いのでメモ化してみた。ただやるだけだと芸がないので、複数の方法を試した。

計測に使ったデータ。かなり小さい

#!/usr/bin/env python
# -*- coding: us-ascii -*-
# vim: syntax=python
#
# Copyright 2008 Noriyuki Hosaka bgnori@gmail.com
#
'''
module level document.
'''
import sys
from compiler import parse
import elementtree.ElementTree as ET

class Hoge(object):
def foo(self):
def bar(x):
return self
return bar

if __name__ == '__main__':
print "Hello World!"
print lambda x : x



  • dictを使う方法: 約144倍早くなった

  • memcacheを使う方法: 10 倍早くなった

  • fileをつかう場合: 1.3~2.2倍早くなった


測定回数がぜんぜん足りていないので、disk seekが起こる場合はなんともいえないだろう。
また、fileが小さいのでdiskの速度の上がり方の小ささはdisk seekの占める時間によって支配されているだろう。
through putが出る状況で、処理するfileが大きければもっと向上するだろう。
memcacheはpickleの処理とmemcacheとの通信処理だろう。ファイルが大きくなれば相対的に向上率は同じか低下するかだろう。

実用ではまた別途計測が必要だ。(/usr/lib64/python2.4下を全部処理して計測するとしないとね)

今後の実装方針としては、キャッシュの構造を二層化してまずはdisk cacheして次にmemcacheするか、disk cacheしてdict cacheするとかするとよいかもです。それで起動のたびに生成するのではなく、disk cacheから読もうとすればいいのでしょう。

0 件のコメント: