Google App EngineSDK1.7.3とNDBを使用してデータストアにアクセスしています。
トランザクションタスクレット内から非トランザクションタスクレットを実行するにはどうすればよいですか?
最初に頭に浮かぶのは次のとおりです。
@ndb.tasklet
@ndb.non_transactional
def non_txn_method():
''' Run some code that does not require a transaction '''
result = calculate_result()
raise ndb.Return(result)
@ndb.tasklet
@ndb.transactional
def txn_method():
''' Run some code that requires a transaction '''
non_txn_result = yield non_txn_method()
ただし、NDBの作成者は、andで行われるようなデコレータを組み合わせず、代わりに関数を使用することをお勧めします。これを行う際の問題については、ここを参照してください。したがって、とデコレータを組み合わせると、壊れやすく、予期しない動作が発生しやすくなる可能性があるのではないかと心配しています。@ndb.tasklet
@ndb.transactional
ndb.transaction_async(callback, **ctx_options)
@ndb.tasklet
@ndb.non_transactional
これはNDBAPIndb.transaction_async(callback, **ctx_options)
で提供されていますが、では提供されていないことに注意してください。ndb.non_transaction_async(callback, **ctx_options)
やりndb.non_transaction_async(callback, **ctx_options)
たいことをしっかりと達成するために、NDB APIで関数を公開する必要があるのでしょうか?