python 内存回收,Python垃圾回收:不再需要的内存不释放给OS?

我用烧瓶写了一个应用程序,用芹菜来完成一个长期运行的任务。在进行负载测试时,我注意到芹菜任务即使在完成任务后也不会释放内存。所以我在谷歌上找到了这个小组讨论。。在

在讨论中,它说,这就是python的工作原理。在

“但是从操作系统的角度来看,程序的大小是分配给Python的总(最大)内存。由于Python只在Windows上将内存返回给堆上的操作系统(分配小对象以外的其他对象),因此如果您运行在Linux上,您只能看到程序使用的总内存增加。”

我用的是Linux。所以我写了下面的脚本来验证它。在import gc

def memory_usage_psutil():

# return the memory usage in MB

import resource

print 'Memory usage: %s (MB)' % (resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1000.0)

def fileopen(fname):

memory_usage_psutil()# 10 MB

f = open(fname)

memory_usage_psutil()# 10 MB

content = f.read()

memory_usage_psutil()# 14 MB

def fun(fname):

memory_usage_psutil() # 10 MB

fileopen(fname)

gc.collect()

memory_usage_psutil() # 14 MB

import sys

from time import sleep

if __name__ == '__main__':

fun(sys.argv[1])

for _ in range(60):

gc.collect()

memory_usage_psutil()#14 MB ...

sleep(1)

输入是一个4MB的文件。即使从“fileopen”函数返回后,4MB内存也没有释放。我在循环运行时检查了htop输出,驻留内存保持在14MB。所以,除非这个过程停止,否则记忆会一直伴随着它。在

因此,如果芹菜工人在任务完成后没有被杀死,它将为自己保留记忆。我知道我可以使用max_tasks_per_child配置值来终止进程并生成一个新进程。有没有其他方法可以从python进程将内存返回给OS?。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值