White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

werkzeug.Cache, memcached

werkzeugはeasy_installで入れた.

http://werkzeug.pocoo.org/documentation/dev/contrib/cache.html

>>> from werkzeug.contrib.cache import SimpleCache
>>> d = SimpleCache(default_timeout = 60)
>>> d.set("bar", "1")
>>> d.get("bar")
'1'
(1min after)
>>> d.get("bar")
>>> d.get("bar") is None
True


memcachedmacportsから入れた.
$ sudo port install memcached


sudo launchctl load -w /Library/LaunchDaemons/org.macports.memcached.plistと入れてスタート時に立ち上げるようにした(少し怪しい)普段は使わないからデーモンにしない方がいいか.

$ memcached -p 11211 -m 64m -vv

memcachedを立ち上げる。-vとかつけると出力が詳細になるみたい。


サンプルコード。

>>> import memcache
>>> mc = memcache.Client(['127.0.0.1:11211'])
>>> mc.flush_all()
>>> mc.set("1", "hogeeewwwwww")
True
>>> mc.get("1")
'hogeeewwwwww'

http://d.hatena.ne.jp/snuffkin/20081215/1229296863で性能評価みたいなのが書いてる


このあたりをsqlalchemyと組み合わせればMemcachedでキャッシュ出来るかと思って組んでみたけど,
途中でエラーでるなぁ.


model.py

main.py

実行結果

2010-02-12 23:05:57,174 INFO sqlalchemy.engine.base.Engine.0x...f950 PRAGMA table_info("test")
2010-02-12 23:05:57,174 INFO sqlalchemy.engine.base.Engine.0x...f950 ()
2010-02-12 23:05:57,176 INFO sqlalchemy.engine.base.Engine.0x...f950
CREATE TABLE test (
id INTEGER NOT NULL,
name VARCHAR(32),
PRIMARY KEY (id)
)


2010-02-12 23:05:57,176 INFO sqlalchemy.engine.base.Engine.0x...f950 ()
2010-02-12 23:05:57,177 INFO sqlalchemy.engine.base.Engine.0x...f950 COMMIT
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/sqlalchemy/orm/scoping.py:121: SADeprecationWarning: Use session.add()
return getattr(self.registry(), name)(*args, **kwargs)
2010-02-12 23:05:57,179 INFO sqlalchemy.engine.base.Engine.0x...f950 BEGIN
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/sqlalchemy/engine/default.py:229: SAWarning: Unicode type received non-unicode bind param value 'aaaaa'
param.append(processors[key](compiled_params[key]))
2010-02-12 23:05:57,182 INFO sqlalchemy.engine.base.Engine.0x...f950 INSERT INTO test (id, name) VALUES (?, ?)
2010-02-12 23:05:57,182 INFO sqlalchemy.engine.base.Engine.0x...f950 [0, 'aaaaa']
2010-02-12 23:05:57,183 INFO sqlalchemy.engine.base.Engine.0x...f950 COMMIT
Traceback (most recent call last):
File "main.py", line 14, in
print q.one()
File "/opt/local/lib/python2.5/site-packages/sqlalchemy/orm/query.py", line 1240, in one
ret = list(self[0:2])
File "/opt/local/lib/python2.5/site-packages/sqlalchemy/orm/query.py", line 1140, in __getitem__
return list(res)
File "/Users/yuki/gitrep/python/temp/sqlalchemy_with_cache/model.py", line 41, in __iter__
cache_key = self._get_cache_key()
File "/Users/yuki/gitrep/python/temp/sqlalchemy_with_cache/model.py", line 33, in _get_cache_key
args = _params_from_query(self)
File "/Users/yuki/gitrep/python/temp/sqlalchemy_with_cache/model.py", line 66, in _params_from_query
for obj in query._from_obj:
TypeError: 'NoneType' object is not iterable

直ったら後で消す

追記

Ubuntu 9.10だと上のプログラムが動くんだけど・・なんだこれ