我在gae上有一个烧瓶应用程序,它工作正常。我正在尝试添加Appstats支持,但一旦启用它,就会出现死锁。
当我试图用记录的用户ndb模型设置一个werkzeug LocalProxy时,这个死锁显然发生了(它被称为current_user,就像在Flask登录中一样,为您提供更多细节)。
错误是:

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 doc):
current_user = LocalProxy(lambda: _get_user())

并且_get_user()生成一个简单的同步查询ndb.query。
提前谢谢你的帮助。

最佳答案

我今天碰到了这个问题。在我的例子中,获取用户详细信息的请求似乎触发了appstats。然后,Appstats将遍历调用堆栈,并在每个堆栈帧中存储所有本地变量的详细信息。
会话本身位于其中一个堆栈帧中,因此appstats尝试将其打印出来,并再次触发用户获取代码。
提出了两个“解决方案”,尽管它们都不是很好。
完全禁用appstats。
禁用appstats中本地变量的日志记录。
我现在是为后者而去。appstats允许您在appengine_config.py文件中配置各种设置。通过添加以下内容,我可以避免记录局部变量的详细信息(这会阻止代码触发错误):

appstats_MAX_LOCALS = 0

10-07 15:16