我的代码得到了一些奇怪的结果。第一次运行代码时,只有futures中的异步函数保存到数据存储中,但没有任何事务被保存到数据存储中。另一方面,跟踪显示事务已提交。当我在期货为空的地方运行相同的代码时,事务存储在数据存储中。我做错什么了?你知道吗
伪码
def check_users():
def callback(user,account):
return ndb.put_multi_async([user,account])
transactions = []
futures = []
users = Users.query().fetch(100)
for user in users:
if user.active:
account = Account.query(parent=user.key).order(-Account.date).get()
account.active = True
user.has_account = True
transactions.append(ndb.transanction_async(lambda:callback(user,account),xg=true))
continue
user.count += 1
futures.append(user.put_async())
for transanction in transactions:
futures = trasanction.get_result()
for future in futures:
future.check_result()
for future in futures:
future.check_result()
已更新 第二Does ndb.toplevel break transactions?,事务创建了一个与另一个异步方法冲突的新上下文。我想知道我的孩子是否也有同样的问题代码。这里答案是:
I discovered that the problems is that both create new contexts. transactional creates a context and ensures that all writes that happen inside of it are non-conflicting. toplevel creates a context and ensures that all futures that are created inside of it are resolved.
目前没有回答
相关问题 更多 >
编程相关推荐