python如何读取图片不损耗_详解如何减少python内存的消耗

本文探讨了Python内存管理,分享了减少内存消耗的方法,包括理解Python垃圾收集机制,使用resource、objgraph和heapy等工具进行内存分析,以及通过slots优化对象内存占用。同时,建议使用format方法替代"+"构造字符串以避免内存碎片和驻留字符串问题。
摘要由CSDN通过智能技术生成

Python 打算删除大量涉及像C和C++语言那样的复杂内存管理。当对象离开范围,就会被自动垃圾收集器回收。然而,对于由 Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情。

在这篇博客中,我将会分享关于减少 Python 内存消耗的方法和分析导致内存消耗/膨胀根源的问题。这些都是从实际操作中总结的经验,我们正在构建 Datos IO 的 RecoverX 分布式备份和恢复平台,这里主要要介绍的是在 Python(在 C++ ,Java 和 bash 中也有一些类似的组件) 中的开发。

Python 垃圾收集

Python解释器对正在使用的对象保持计数。当对象不再被引用指向的时候,垃圾收集器可以释放该对象,获取分配的内存。例如,如果你使用常规的Python(CPython, 不是JPython)时,Python的垃圾收集器将调用free()/delete() 。

实用工具

资源(resource)

resource 模块用来查看项目当前得的固有的)内存消耗(固有内存是项目实际使用的RAM),注意resource库只在linux系统下有效

>>> import resource

>>> resource.getrusage(resource.RUSAGE_SELF).ru_maxrss

443

对象(objgraph)

objgraph 是一个实用模块,可以展示当前内存中存在的对象

来看看objgraph的简单用法:

import objgraph

import random

import inspect

class Foo(object):

def __init__(self):

self.val = None

def __str__(self):

return "foo - val: {0}".format(self.val)

def f():

l = []

for i in range(3):

foo = Foo()

l.append(foo)

return l

def main():

d = {}

l = f()

d['k'] = l

print "list l has {0} objectsoftype Foo()".format(len(l))

pythontest1.py

输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值