`
siweidashu
  • 浏览: 9145 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

python内存释放原则

阅读更多
def getInit(class_name):
    """动态加载模块"""
    resultmodule = __import__(class_name, globals(), locals(), [class_name])
    resultclass = getattr(resultmodule, class_name)
    return resultclass()

import threading, time
        
class b:
    def __init__(self, *args, **kwargs):        
        self.name = "b"
        self.class_name = "a"
        print "%s is inited" % (self.name)
        
    def __del__(self):
        print "%s is deleted" % (self.name)
    
    def other_run(self, obj=None):
        if obj:
            obj.run()
    
    def run(self, *args, **kwargs):
        obj = getInit(self.class_name)
        obj.run()
        self.other_run(obj)        
        print "%s is run" % (self.name)
        
def treading():
    n = 0
    c = b()
    while n<2:
        n += 1
        print "\n"
        print "start"
        c.run()
        print "end"
        print "\n"
    

if __name__ == '__main__':
    param = {}
    th = threading.Thread(target = treading, args = ())
    th.start()
    
exit()


b is inited


start
a is inited
a is run
a is run
b is run
a is deleted
end




start
a is inited
a is run
a is run
b is run
a is deleted
end


b is deleted


每个循环内都把a重新加载并且释放内存



def getInit(class_name):
    resultmodule = __import__(class_name, globals(), locals(), [class_name])
    resultclass = getattr(resultmodule, class_name)
    return resultclass()

import threading, time
import a
        
class b:
    def __init__(self, *args, **kwargs):        
        self.name = "b"
        self.class_name = "a"
        self.obj = getInit(self.class_name)
        print "%s is inited" % (self.name)
        
    def __del__(self):
        print "%s is deleted" % (self.name)
    
    def other_run(self):
        if self.obj:
            self.obj.run()
    
    def run(self, *args, **kwargs):
        self.obj.run()
        self.other_run()        
        print "%s is run" % (self.name)
        
def treading():
    n = 0
    c = b()
    while n<2:
        n += 1
        print "\n"
        print "start"
        c.run()
        print "end"
        print "\n"
    

if __name__ == '__main__':
    param = {}
    th = threading.Thread(target = treading, args = ())
    th.start()
    
exit()


a is inited
b is inited


start
a is run
a is run
b is run
end




start
a is run
a is run
b is run
end


b is deleted
a is deleted


最后结束a才释放


内存释放是根据指向的
分享到:
评论

相关推荐

    内存释放帮助你合理的利用你的内存空间

    内存释放,即释放内存,是这个领域的一个关键操作,它对于有效地利用系统资源、防止内存泄漏以及保持系统的稳定性和性能至关重要。本文将深入探讨内存释放的相关知识点。 首先,我们要理解什么是内存。在计算机系统...

    07-2:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归

    在本“07-2:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归”教程中,我们将深入探讨Python编程中的关键概念,特别是关于函数的高级用法。以下是对这些主题的详细阐述: 1. 参数列表: 在...

    07-1:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归

    在本“07-1:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归”的教程中,我们将深入探讨Python编程语言中的关键概念,特别是与函数相关的高级主题。这些主题对于任何希望在Python领域深化...

    关于内存资源无法释放的例子

    3. **良好的编程习惯**:编写代码时遵循“尽早申请,尽早释放”的原则,避免长时间持有不需要的内存。 4. **及时解除引用**:确保不再需要的对象能被正确地解除引用,以便垃圾回收器能够回收其内存。 5. **更新和...

    fluent python.zip

    5. **上下文管理器**:Python的with语句和上下文管理协议是处理资源清理(如文件操作)的关键,它们确保了资源的正确释放,避免了内存泄漏和资源泄露。 6. **迭代器和生成器**:迭代器和生成器是Python处理序列数据...

    Writing Idiomatic Python 3

    5. **上下文管理器**:Python的with语句和上下文管理器用于资源的自动获取和释放,如文件操作和数据库连接,确保资源的正确关闭,防止内存泄漏。 6. **异常处理**:Python的try/except/finally语句用于错误处理,...

    python从零开始源码

    例如,生成器可以节省内存,装饰器可以增强函数功能,上下文管理器用于资源的自动获取和释放。 在"python从零开始源码"中,你可能会看到各种实际应用的例子,比如简单的命令行工具、小型的Web应用、数据处理脚本等...

    内存管理 c++ C++内存回收

    C++不同于许多高级语言,如Java或Python,它不提供自动垃圾回收机制,因此程序员需要手动进行内存分配和释放。本文将深入探讨C++中的内存管理,包括内存回收、内存泄漏以及相关的检测工具。 首先,我们要理解C++的...

    Python_C核心指南是一套关于用C编码的可靠的指导原则、规则和最佳实践.zip

    了解如何正确分配和释放内存,避免内存泄漏和悬挂指针,是编写安全、高效的C扩展的重要部分。PyMem_Malloc、PyMem_Free等函数是关键工具。 3. 性能优化:C语言通常比Python快,因此在性能敏感的部分使用C可以显著...

    内存溢出小程序

    7. **编程习惯**:良好的编程习惯,如遵循“谁分配,谁释放”原则,使用RAII(Resource Acquisition Is Initialization)策略,以及及时清理不再使用的资源,可以有效防止内存泄漏。 8. **内存池**:使用内存池技术...

    MySQL-python-1.2.3

    - 注意连接关闭和资源释放,避免内存泄漏。 13. **Python的ORM框架集成**: - MySQL-python可以与Python的ORM(对象关系映射)框架,如SQLAlchemy或Peewee结合使用,简化数据库操作。 14. **异步操作**: - ...

    深入理解Python特性_1592298155816.pdf,深入理解python特性pdf,Python源码.zip

    3. **自动内存管理**:Python有内置的垃圾回收机制,负责自动释放不再使用的内存,程序员无需手动管理内存。 4. **丰富的标准库**:Python的标准库涵盖了许多领域,如网络、操作系统接口、文本处理、数学计算等,...

    流畅的Python - [巴西]_Luciano_Ramalho_python_

    3. **上下文管理器**:Python的`with`语句用于创建上下文管理器,它在进入和退出代码块时自动执行某些操作,如资源的获取和释放。这有助于避免资源泄露,提高程序的健壮性。 4. **元编程**:元编程是Python的一个...

    内存清道夫 检测内存泄漏强力单元

    8. **C++ RAII(Resource Acquisition Is Initialization)原则**:RAII是一种编程范式,资源在创建时获取,在销毁时释放,确保资源在作用域结束时被正确清理,有助于防止内存泄漏。 9. **编程规范**:遵循良好的...

    Python3.0 Tutorial 简体中文版

    - **面向对象编程**:理解类(class)、对象(object)的概念,以及继承(inheritance)、多态(polymorphism)和封装(encapsulation)等面向对象的基本原则。 **3. 输入与输出** - **标准输入/输出**:了解如何...

    走近python

    - **内存管理**:Python内置了自动内存管理机制,开发者无需手动管理内存分配与释放。 #### Python的应用领域 - **Web开发**:Python通过定义WSGI(Web Server Gateway Interface)标准,支持构建高效的Web应用...

    Python中的程序优化(基础笔记)

    遵循“编写简单、明确的代码”原则,避免过度复杂的逻辑。使用内置函数和标准库,因为它们通常比自定义实现更高效。例如,使用`map()`、`filter()`和`reduce()`函数替代循环。 其次,了解Python的数据结构性能特点...

    python官方2.5.4.ia64版本msi安装包

    1. **增强的语法**:Python 2.5引入了对with语句的支持,这是一种上下文管理协议,允许更简洁的资源获取和释放。此外,它还引入了内建的set数据类型,提供集合操作功能。 2. **Unicode支持**:Python 2.5增强了对...

    华为OD机试C卷- 简易内存池(Java & JS & Python).md-私信看全套OD代码及解析

    4. **内存释放函数`free`**: - 检查释放的地址是否合法。 - 尝试合并相邻的空闲内存块,以减少内存碎片。 - 将释放的内存添加回空闲内存块列表中。 #### 总结 本题目的解决不仅涉及到基本的数据结构使用(如...

Global site tag (gtag.js) - Google Analytics