正常异步和事务异步不能一起工作

2024-04-18 01:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码得到了一些奇怪的结果。第一次运行代码时,只有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()

trace list

已更新 第二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.


Tags: 数据代码inforasyncthatcheckfuture

热门问题