Appengine Appstats 造成死锁

问题描述 投票:0回答:2

我在 gae 上有一个 Flask 应用程序,它运行正常。我正在尝试添加 Appstats 支持,但是一旦启用它,我就会陷入僵局。

当我尝试使用登录用户 ndb 模型设置 werkzeug LocalProxy 时,显然会发生这种死锁(它称为 current_user,就像在 Flask-Login 中所做的那样,为您提供更多详细信息)。

错误是:

RuntimeError: Deadlock waiting for <Future 104c02f50 created by get_async(key.py:545) for tasklet get(context.py:612) suspended generator get(context.py:645); pending>

使用以下语法设置 LocalProxy 对象(根据 Werkzeug 文档):

current_user = LocalProxy(lambda: _get_user())

并且 _get_user() 进行简单的同步查询 ndb.query。

预先感谢您的帮助。

python google-app-engine
2个回答
3
投票

我今天遇到了这个问题。 就我而言,获取用户详细信息的请求似乎正在触发 appstats。 然后,Appstats 将遍历调用堆栈并在每个堆栈帧中存储所有局部变量的详细信息。

会话本身位于这些堆栈帧之一中,因此 appstats 尝试将其打印出来并触发用户再次获取代码。

提出了 2 个“解决方案”,尽管它们都不是伟大

  • 完全禁用 appstats。
  • 在 appstats 中禁用局部变量的记录。

我现在选择了后者。 appstats 允许您在

appengine_config.py
文件中配置各种设置。 通过添加以下内容,我能够避免记录局部变量详细信息(这会阻止代码触发错误):

appstats_MAX_LOCALS = 0

0
投票

将 google-cloud-sdk 目录移动到新用户/位置后,我遇到了这个错误。只是行号改变了。

重新安装或升级sdk有助于解决该错误。

get_async(key.py:619) for tasklet get(context.py:715) suspended generator get(context.py:784) 
© www.soinside.com 2019 - 2024. All rights reserved.