GAE 有各种限制,其中之一是最大可分配内存块的大小为 1Mb(现在增加了 10 倍,但这并没有改变问题)。限制意味着不能在 list() 中放置超过一定数量的项目,因为 CPython 会尝试为元素指针分配连续的内存块。拥有巨大的 list()s 可能被认为是不好的编程习惯,但即使程序本身没有创建巨大的结构,CPython 也会在幕后维护一些。
似乎 CPython 正在维护单个全局对象列表或其他东西。即具有许多小对象的应用程序倾向于分配越来越大的单个内存块。
第一个想法是 gc,禁用它会稍微改变应用程序的行为,但仍然保留了一些结构。
遇到此问题的最简单的简短应用程序是:
a = b = []
number_of_lists = 8000000
for i in xrange(number_of_lists):
b.append([])
b = b[0]
谁能告诉我如何防止 CPython 在应用程序中有许多对象时分配巨大的内部结构?