在Appengine中腌制对象时超出了最大递归深度

时间:2013-12-04 05:48:38

标签: google-app-engine python-2.7 memcached

在处理appengine项目时,使用python / webapp2。我们有dict“data”,我们会用

将它设置为memcache

memcache.set(some_key,data)

然而,我在蚀刻对象时不断超出RuntimeError最大递归深度。如果没有在sys.setrecursionlimit(number)中设置一些数字,你如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

很难说没有更多信息,但这是一种对我有用的方法。我以为我有以下情况:

  • 没有内存。
  • 在开发环境中无法重现。
  • 序列化一个类,其中包含几个字符串和日期时间,以及两个列表,每个类都由字符串和日期时间组成。
  • 无法想象周期性参考会是怎样的(如果有的话,泡菜应该能够处理,不是吗?)
  • 在大约100个这样的对象中,所有序列化只有一个。

事实证明我在一个字段中设置了一个类似字符串的对象NavigableString。这引用了整个解析的HTML文档,并将其序列化导致溢出。

我最终能够使用sys.setrecursionlimit降低家用机器上的堆栈深度进行调试。

然后我使用自定义pickler,覆盖save(self, obj)以发出一些调试信息,并看到了问题。