Python 事务性tasklet中的非事务性操作
我正在使用Google App Engine SDK 1.7.3和NDB访问数据存储 如何从事务性tasklet中运行非事务性tasklet 首先想到的是:Python 事务性tasklet中的非事务性操作,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我正在使用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.Retur
@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的创建者不能将装饰器组合在一起,例如使用@NDB.tasklet
和@NDB.transactional
完成的装饰器,而是使用NDB.transaction\u async(回调,**ctx\u选项)
函数。有关执行此操作的问题,请参阅。因此,我担心组合@ndb.tasklet
和@ndb.non_transactional
装饰程序也可能很脆弱,容易出现意外行为
请注意,ndb.non\u transaction\u async(回调,**ctx\u选项)
中提供了ndb.non\u transaction\u async(回调,**ctx\u选项)
我想知道是否需要在ndb API中公开一个
ndb.non_transaction\u async(回调,**ctx\u选项)
函数,以帮助我稳健地完成我想做的事情?我建议您在ndb bug跟踪器中为建议的新功能提交一个bug:
请注意,以下装饰订单按预期工作(至少从1.7.3开始):
因此需要使用旧的db解决方案。谢谢@guido,我看到您不再使用它了。
@ndb.non_transactional
@ndb.tasklet
def non_txn_method():
# If calling old db, need this too:
datastore._SetConnection(None)
# ...