Appengine Appstats给出了死锁

时间:2013-12-20 09:03:33

标签: python google-app-engine

我在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 doc):

current_user = LocalProxy(lambda: _get_user())

_get_user()创建一个简单的同步查询ndb.query。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

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

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

提出2个“解决方案”,但它们都不是很好

  • 完全禁用appstats。
  • 禁用appstats中的本地变量记录。

此刻我已经选择了后者。 appstats允许您配置appengine_config.py文件中的各种设置。我能够通过添加以下内容来避免记录本地变量详细信息(这会阻止代码触发错误):

appstats_MAX_LOCALS = 0