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函数:参数列表、内存分配、设计原则、递归”教程中,我们将深入探讨Python编程中的关键概念,特别是关于函数的高级用法。以下是对这些主题的详细阐述: 1. 参数列表: 在...
在本“07-1:Python课程 教程 进阶 PYTHON函数:参数列表、内存分配、设计原则、递归”的教程中,我们将深入探讨Python编程语言中的关键概念,特别是与函数相关的高级主题。这些主题对于任何希望在Python领域深化...
3. **良好的编程习惯**:编写代码时遵循“尽早申请,尽早释放”的原则,避免长时间持有不需要的内存。 4. **及时解除引用**:确保不再需要的对象能被正确地解除引用,以便垃圾回收器能够回收其内存。 5. **更新和...
5. **上下文管理器**:Python的with语句和上下文管理协议是处理资源清理(如文件操作)的关键,它们确保了资源的正确释放,避免了内存泄漏和资源泄露。 6. **迭代器和生成器**:迭代器和生成器是Python处理序列数据...
5. **上下文管理器**:Python的with语句和上下文管理器用于资源的自动获取和释放,如文件操作和数据库连接,确保资源的正确关闭,防止内存泄漏。 6. **异常处理**:Python的try/except/finally语句用于错误处理,...
例如,生成器可以节省内存,装饰器可以增强函数功能,上下文管理器用于资源的自动获取和释放。 在"python从零开始源码"中,你可能会看到各种实际应用的例子,比如简单的命令行工具、小型的Web应用、数据处理脚本等...
C++不同于许多高级语言,如Java或Python,它不提供自动垃圾回收机制,因此程序员需要手动进行内存分配和释放。本文将深入探讨C++中的内存管理,包括内存回收、内存泄漏以及相关的检测工具。 首先,我们要理解C++的...
了解如何正确分配和释放内存,避免内存泄漏和悬挂指针,是编写安全、高效的C扩展的重要部分。PyMem_Malloc、PyMem_Free等函数是关键工具。 3. 性能优化:C语言通常比Python快,因此在性能敏感的部分使用C可以显著...
7. **编程习惯**:良好的编程习惯,如遵循“谁分配,谁释放”原则,使用RAII(Resource Acquisition Is Initialization)策略,以及及时清理不再使用的资源,可以有效防止内存泄漏。 8. **内存池**:使用内存池技术...
- 注意连接关闭和资源释放,避免内存泄漏。 13. **Python的ORM框架集成**: - MySQL-python可以与Python的ORM(对象关系映射)框架,如SQLAlchemy或Peewee结合使用,简化数据库操作。 14. **异步操作**: - ...
3. **自动内存管理**:Python有内置的垃圾回收机制,负责自动释放不再使用的内存,程序员无需手动管理内存。 4. **丰富的标准库**:Python的标准库涵盖了许多领域,如网络、操作系统接口、文本处理、数学计算等,...
3. **上下文管理器**:Python的`with`语句用于创建上下文管理器,它在进入和退出代码块时自动执行某些操作,如资源的获取和释放。这有助于避免资源泄露,提高程序的健壮性。 4. **元编程**:元编程是Python的一个...
8. **C++ RAII(Resource Acquisition Is Initialization)原则**:RAII是一种编程范式,资源在创建时获取,在销毁时释放,确保资源在作用域结束时被正确清理,有助于防止内存泄漏。 9. **编程规范**:遵循良好的...
- **面向对象编程**:理解类(class)、对象(object)的概念,以及继承(inheritance)、多态(polymorphism)和封装(encapsulation)等面向对象的基本原则。 **3. 输入与输出** - **标准输入/输出**:了解如何...
- **内存管理**:Python内置了自动内存管理机制,开发者无需手动管理内存分配与释放。 #### Python的应用领域 - **Web开发**:Python通过定义WSGI(Web Server Gateway Interface)标准,支持构建高效的Web应用...
遵循“编写简单、明确的代码”原则,避免过度复杂的逻辑。使用内置函数和标准库,因为它们通常比自定义实现更高效。例如,使用`map()`、`filter()`和`reduce()`函数替代循环。 其次,了解Python的数据结构性能特点...
1. **增强的语法**:Python 2.5引入了对with语句的支持,这是一种上下文管理协议,允许更简洁的资源获取和释放。此外,它还引入了内建的set数据类型,提供集合操作功能。 2. **Unicode支持**:Python 2.5增强了对...
4. **内存释放函数`free`**: - 检查释放的地址是否合法。 - 尝试合并相邻的空闲内存块,以减少内存碎片。 - 将释放的内存添加回空闲内存块列表中。 #### 总结 本题目的解决不仅涉及到基本的数据结构使用(如...