LoginSignup
2
0

More than 5 years have passed since last update.

GoogleAppsEngineでDatastoreの更新をasyncにやる書き方

Last updated at Posted at 2016-08-17

タイトルで言いたいことを書きました。Python2.7

from google.appengine.ext import ndb

class TestModel(ndb.Model):
    name = ndb.StringProperty()

@ndb.transactional_tasklet
def txn (key):
    entity = yield key.get_async()
    if not entity:
      entity = TestModel(key=key)
    entity.populate(key=key, name='foo')
    yield entity.put_async()
    raise ndb.Return(entity)

def put_multi_async(keys):
    @ndb.tasklet
    def _put_multi_async(keys):
        results = yield [txn(key) for key in keys]
        raise ndb.Return(results)

    return _put_multi_async(keys).get_result()

def main():
  key1 = ndb.Key(TestModel, 1)
  key2 = ndb.Key(TestModel, 2)
  key3 = ndb.Key(TestModel, 3)

  res = put_multi_async([key1, key2, key3])
  print res

main()

'''
=>
[TestModel(key=Key('TestModel', 1), name=u'foo'),
 TestModel(key=Key('TestModel', 2), name=u'foo'),
 TestModel(key=Key('TestModel', 3), name=u'foo')]
'''
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0