python 不会为元组释放内存,是吗?

标签 python google-app-engine memory-leaks tuples backend

根据我读到的这篇文章,看起来不可变类型可能会变得不朽。

http://effbot.org/pyfaq/why-doesnt-python-release-the-memory-when-i-delete-a-large-object.htm

我目前正在努力解决我在谷歌应用引擎上运行的网络服务的内存使用问题。 “使用过多的元组”是否可能是导致此问题的潜在原因?


感谢回复: 我在 google app engine 后端实例上运行我的代码,它有一个内存使用上限 (128mb)。它说我使用了比允许更多的内存并停止了我的实例。如评论所述,可能是“内存使用量仍然很大”而不是“内存泄漏”。

最佳答案

这篇文章没有指定不可变类型 - 它指定:

Another possible cause for excessive memory usage is that Python uses so-called “free lists” for certain object types, including integers and floats.

我不知道您可以获得关于 GAE 进程的哪些信息,但是您可以在自己的系统上尝试这个实验。

首先,启动一个python解释器并找到进程。然后运行这个命令:

>>> many_tuples = [() for x in range(5000000)] #replace with xrange for 2.x

然后,看看内存使用情况。您刚刚创建了一个包含 500 万个元组的列表。现在输入:

>>> del many_tuples

在我的系统(Python 3.2、Win 7)上,我的内存使用量激增了大约 20k,然后在我del 变量后下降了相同的数量。如果您可以获得有关您的进程(CPU、内存使用情况)的信息,您可以尝试这样做 - 可能连续多次,这应该会给您带来一些更高内存使用率的峰值。

关于python 不会为元组释放内存,是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099083/

相关文章:

c++ - 如果将 delete[] 应用于非数组指针会发生什么?

python - 如何在Django中过滤模板中的BooleanField?

python - 我自己的 RPC 服务器 API key

python - 从应用程序引擎访问谷歌云存储帐户对象

python - Hadoop Streaming 程序子进程失败,代码为 139

Java内存使用/修复

python - 当索引不像auto_increment时如何获取pandas行号。

python - 如何测试Python列表中序列的成员资格?

python - 如何在发布数据python中接收字典

java - Google 电子表格中的 appengine 问题