以下代码按预期工作,不会触发断言:
@ndb.transactional
@ndb.tasklet
def Foo():
assert ndb.in_transaction()
以下代码中断,触发断言:
@ndb.transactional
@ndb.toplevel
def Foo():
assert ndb.in_transaction()
我尝试用 ndb.transaction 调用或 ndb.transaction_async 调用替换装饰器,但都不起作用。
ndb.toplevel 和事务是否存在错误?
最佳答案
我发现问题在于两者都创建了新的上下文。 transactional 创建一个上下文并确保在其中发生的所有写入都是不冲突的。 toplevel 创建一个上下文并确保在其中创建的所有 future 都得到解决。
因此,toplevel 破坏了事务的上下文。这两者在当前的实现中无法结合。
关于python - ndb.toplevel 会破坏交易吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506231/