python - ndb.toplevel 会破坏交易吗?

标签 python google-app-engine asynchronous transactions app-engine-ndb

以下代码按预期工作,不会触发断言:

@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/

相关文章:

Python 3,增量迭代器

python - 如何设置 axvlines 使用与 matplotlib 中的 axes.color_cycle 相同的颜色?

google-app-engine - 未记录的托管 VM 任务队列 RPCFailedError

google-app-engine - 如何在azure中托管网站并在google apps中托管电子邮件

google-app-engine - AppEngine Dev Server 上的 Google KMS - 日志记录困惑

c++ - 从 C++ 运行 CURL 以异步获取多个 URL

python - admin注册员工用户无法登录django admin,表单注册员工用户无法登录

python - 在 apache(linux 和 windows)上运行 python 脚本

javascript - 异步函数try catch block 是否可以包装称为异步函数,这也可能引发错误?

c# - 异步等待阻塞 ui wp8