我在 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。
预先感谢您的帮助。
我今天遇到了这个问题。 就我而言,获取用户详细信息的请求似乎正在触发 appstats。 然后,Appstats 将遍历调用堆栈并在每个堆栈帧中存储所有局部变量的详细信息。
会话本身位于这些堆栈帧之一中,因此 appstats 尝试将其打印出来并触发用户再次获取代码。
提出了 2 个“解决方案”,尽管它们都不是伟大。
我现在选择了后者。 appstats 允许您在
appengine_config.py
文件中配置各种设置。 通过添加以下内容,我能够避免记录局部变量详细信息(这会阻止代码触发错误):
appstats_MAX_LOCALS = 0
将 google-cloud-sdk 目录移动到新用户/位置后,我遇到了这个错误。只是行号改变了。
重新安装或升级sdk有助于解决该错误。
get_async(key.py:619) for tasklet get(context.py:715) suspended generator get(context.py:784)