我在地球科学应用中广泛使用 Python(Canopy)。因为我的应用程序是内存消耗,我试图找到方法来擦除我的程序中不再需要的变量,我尝试使用 del 命令来擦除变量内存,但我发现 Canopy 使用的空间仍然是相同的。关于如何从内存中完全擦除变量的任何想法。谢谢
我有一个单一的 gunicorn 工作进程正在运行以读取一个巨大的 excel 文件,该文件最多需要 5 分钟并使用 4GB 的 RAM。但是在请求完成处理后,我在系统监视器上注意到它仍然永远分配 4GB 的 RAM。关于如何释放内存的任何想法?
我正在和一个朋友聊天,比较语言,他提到 Java 的自动内存管理优于 Python,因为 Java 的压缩,而 Python 则没有——因此对于长时间运行的服务器,Python 是一个糟糕的选择。
没有进入哪个更好或更坏,他的说法是否正确 - CPython 的垃圾收集器是否不会压缩内存,因此,长时间运行的 Python 进程是否会随着时间的推移变得越来越碎片化?
我知道运行 CPython 的垃圾收集器是可选的。大多数情况下,它使用自动引用计数进行自动内存管理,一旦引用计数达到零,对象就会被释放——因此,就释放对象而言,CPython 的垃圾收集器唯一需要做的就是检测没有根集中的对象有一个引用。但我不知道除此之外它是否进行任何压缩的细节。
如果没有,那么长时间运行的 CPython 进程如何解决内存碎片问题?
我试图在这里复制内存使用测试.
从本质上讲,帖子声称给出了以下代码片段:
import copy
import memory_profiler
@profile
def function():
x = list(range(1000000)) # allocate a big list
y = copy.deepcopy(x)
del x
return y
if __name__ == "__main__":
function()
Run Code Online (Sandbox Code Playgroud)
调用
python -m memory_profiler memory-profile-me.py
Run Code Online (Sandbox Code Playgroud)
在64位计算机上打印
Filename: memory-profile-me.py
Line # Mem usage Increment Line Contents
================================================
4 @profile
5 9.11 MB 0.00 MB def function():
6 40.05 MB 30.94 MB x = list(range(1000000)) # allocate a big list
7 89.73 MB 49.68 MB y = copy.deepcopy(x)
8 82.10 MB …Run Code Online (Sandbox Code Playgroud) 在python中进行这样的比较,python是否为字符串常量“help”创建了一个临时对象,然后继续进行相等比较?该对象将在某个时间点后被垃圾回收。
s1 = "nohelp"
if s1 == "help":
# Blah Blah
Run Code Online (Sandbox Code Playgroud)