2

私は Django を初めて使用し、組み込みのキャッシュ システムを使用しようとしています。Django 1.4 を使用しています。

私の目標

私の見解では、外部 API への呼び出しをキャッシュしたいと考えています。cache.get()したがって、私は使用したいと思いますcache.set()

私のアプローチ

1) pylibmc と python-memcached をインストールしました

2)私の設定で追加しました:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        # i also tried 'django.core.cache.backends.memcached.MemcachedCache'
        'LOCATION': '127.0.0.1:11211',
    }
}

3)私の見解では、次のように追加しました:

myData = cache.get('myKey')
if not myData:
    myData = myApiCall()
    cache.set('myKey', myData)

4) myApiCall() は、lastfm ライブラリのメソッド呼び出しです。

api_key = '12345678901234567890'
api = lastfm.Api(api_key)
user = api.get_user('aLastFmUser')
myData = user.top_artists # this is the relevant line

問題

pylibmc キャッシュ バックエンドを使用すると、次のエラー メッセージが表示されます。

cPickle.PicklingError
PicklingError: Can't pickle <type 'module'>: attribute lookup __builtin__.module failed

そして、これは memcached キャッシュ バックエンドを使用する場合:

TypeError
TypeError: can't pickle module objects

どうやら、酸洗い/シリアル化がうまくいかない。ここで何が起きてるの?

4

1 に答える 1

0

DrTyrsaのコメントのおかげで、私は解決策を見つけました:

オブジェクトをピクルするとエラーが発生する可能性があるため、必要なデータをリストまたは辞書に抽出する方が信頼性が高くなります。

于 2012-06-13T16:21:51.573 に答える