GAE にはさまざまな制限があり、そのうちの 1 つはメモリの割り当て可能な最大ブロックのサイズが 1Mb に達することです (現在は 10 倍ですが、問題は変わりません)。この制限は、CPython が要素ポインターに連続したメモリ ブロックを割り当てようとするため、list() にいくつかの項目を超える数を配置できないことを意味します。巨大な list() を持つことはプログラミングの悪い習慣と見なされる可能性がありますが、プログラム自体に巨大な構造が作成されていなくても、CPython は舞台裏でいくつかを維持しています。
CPython は、オブジェクトの単一のグローバル リストまたは何かを維持しているようです。つまり、多くの小さなオブジェクトを持つアプリケーションは、ますます大きな単一のメモリ ブロックを割り当てる傾向があります。
最初のアイデアは gc で、それを無効にするとアプリケーションの動作が少し変わりますが、それでもいくつかの構造は維持されます。
問題が発生する最も単純な短いアプリケーションは次のとおりです。
a = b = []
number_of_lists = 8000000
for i in xrange(number_of_lists):
b.append([])
b = b[0]
アプリケーションに多くのオブジェクトがある場合、CPython が巨大な内部構造を割り当てないようにする方法を教えてもらえますか?