Dictionary-like なオブジェクトを引数として受け取り,それを使ってメモ化を行うデコレータ(decorator)です.メモ化対象の関数・メソッドの特性に応じて,in memoryでキャッシュを行ったり,ディスク上のデータを読み書きしたりする,といったキャッシングの方法を外部から隠蔽できます.
使用例
from memoizer import memoize, pickle_cache
linkPattern=re.compile(r'^.+?<a href="http://web.archive.org/web/([0-9]{14})/.+$')
@memoize(pickle_cache('urlbirthday', expire=sys.maxint))
def urlbirthday(url, unavailable=None):
try:
for line in urllib2.urlopen("http://web.archive.org/web/*/"+url):
m = linkPattern.match(line)
if m:
datestr=m.group(1)
return datetime.datetime(*map(int,map(lambda be: datestr[be[0]:be[1]], dateIndices))).date()
except urllib2.HTTPError, e:
pass
return unavailable
説明
- 関数urlbirthdayの結果がファイルシステムにキャッシュされ、同じ引数による二回目以降の呼び出しはキャッシュされたデータが利用される
- メモ化したデータをファイルシステムに永続化されて(Pickle形式で)キャッシュしているので、次回のPythonプログラム実行時にも有効
応用例
- MySQLなどのデータベースにデータをキャッシュするdb_cacheのようなdictionary-likeオブジェクトを作成し利用する