我正在使用Google App Engine SDK 1.7.3和NDB来访问数据存储。事务性任务小程序中的非事务性操作
我应该如何在事务性的tasklet中运行一个非事务性的tasklet?
以下是我想到的第一件事:
@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 advises的创造者不是装饰相结合,如与@ndb.tasklet
和@ndb.transactional
所做的和所使用ndb.transaction_async(callback, **ctx_options)
函数。请参阅here解决此问题。因此,我担心结合@ndb.tasklet
和@ndb.non_transactional
修饰器也可能是脆弱的,并且容易出现意想不到的行为。
请注意ndb.transaction_async(callback, **ctx_options)
在NDB API中提供,但不是ndb.non_transaction_async(callback, **ctx_options)
。
我想知道是否需要在NDB API中公开ndb.non_transaction_async(callback, **ctx_options)
函数来帮助我强有力地完成我想要做的事情?
谢谢@guido,我看到你不再为此工作。 http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=230&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary%20Stars – Dan