奇妙な問題があります。タスクでは、データストアからデータをフェッチし、非同期で memcache に書き込みます。
ke = database.Events.query(database.Events.eventid.IN(eventslist))
eventskeys = ke.fetch(len(eventslist),keys_only = True)
data = ndb.get_multi(eventskeys)
eventsdic = {}
for event in data:
eventsdic.update({event.eventid: event.participants})
client = memcache.Client()
rpc = memcache.create_rpc()
response = client.set_multi_async(eventsdic, time=3600, rpc=rpc)
イベントリストには 20 個のアイテムがあります。私は、キュー内のさまざまなタスクにまたがる約 500 のアイテムに対してこれを行います。
エラーは発生しません。しかし、最初の試行では、500 件のイベントのうち約 300 件が実際に memcache に存在することに気付きました。まだ memcache にないイベントだけで 2 ~ 3 回再試行すると、しばらくすると memcache が 100% になります。
しかし、最初の試行でうまくいかないのはなぜですか?