python内存泄漏,python垃圾手动回收,1
部署的舆情系统,内存变大,找原因。
一个小例子。
def func():
local_list = list(range(10000000))
func()
time.sleep(200)
能够观察到,在sleep 200秒的时间内,程序的内存一直是200多M,虽然是函数局部变量,执行后在外部无法使用了,但仍然占据大内存。
再来一个
global_list = list(range(10000000))
del global_list
time.sleep(200)
能够观察到,在sleep 200秒的时间内,程序的内存一直也是200多M,引用计数变为0,但仍然占据大内存。
引入gc模块
在sleep之前插入 gc.collect()
查看内存,内存直接下降到10M内了,这是我期待的。
本篇的list代表一个巨大的内存的变量,以range(10000000)来指代。不要扯上什么xrange range,我就是要用这个来简单指代一些巨大内存的变量。
实际过程中指代的是下载 上传巨大的html源码,爬虫过程中如果遇到mp4 avi连接没有过滤,下载了mp4的字符串就会是一个巨大的字符串。
之前有个地方,给njinx的网关接口上传结果,发现一直被njinx拒绝,请求不成功,而程序中遇到这种情况,一直等待60秒一直重试,导致永远不可能上传,内存永远降不下来。
下一篇介绍,监控内存和释放内存。
反对极端面向过程编程思维方式,喜欢面向对象和设计模式的解读,喜欢对比极端面向过程编程和oop编程消耗代码代码行数的区别和原因。致力于使用oop和36种设计模式写出最高可复用的框架级代码和使用最少的代码行数完成任务,致力于使用oop和设计模式来使部分代码减少90%行,使绝大部分py文件最低减少50%-80%行的写法。