python编程(类的释放)

综合编程 2017-12-30

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

大多数的脚本语言都是由虚拟机来安排内存释放的。所以,这些语言一本只要申请内存使用,不需要手工去释放它们。那它们是什么时候被释放的,其实我们可以自己做几个实验看看。

1、单个变量

我们知道python语言下面,类释放的时候会调用 del
这个函数,所以只要在这个函数里面添加一些消息就可以了。

class A():
    def __init__(self):
        print '__init__'

    def __del__(self):
        print '__del__'

a=A()

这几行代码比较简单,几乎输完命令的同时就结束了。结果也是很清楚的,出现了init和del的打印。这说明虚拟机在执行结束的时候确实是调用了del函数的。

2、添加循环

为了增加复杂性,可以在原有代码后面增加一些 循环
,这样可以看看循环发生之前虚拟机是否会调用del函数。

import time

class A():
    def __init__(self):
        print '__init__'

    def __del__(self):
        print '__del__'

a=A()

cnt = 0
while True:
    time.sleep()
    cnt += 1
    print cnt

实验表明,在循环之前不会有del的相关打印。这说明,del函数调用是由虚拟机决定的。del发生的时间决定与虚拟机的垃圾回收机制。

3、显式删除

既然不清楚什么时候删除变量,那么我们可以用del这个命令来删除,效果是一样的。

import time

class A():
    def __init__(self):
        print '__init__'

    def __del__(self):
        print '__del__'

a=A()
del a

cnt = 0
while True:
    time.sleep()
    cnt += 1
    print cnt

通过实验,我们发现del在循环之前确实被调用了,相关的打印也可以在终端清楚地看出来。这说明del会强制class内存被释放,且这应该是一个阻塞的动作。

4、使用注意

目前为止,我在使用python的时候还没有显示遇到内存方面的问题。唯一的经验,就是对于大量的业务数据空间,要及时del掉。这样可以del时间均匀地分配到每一个业务中去,防止后面的delay时间过长,仅此而已。如果大家有什么好的想法和做法,也欢迎多多交流。

责编内容by:平凡的程序员 (源链)。感谢您的支持!

您可能感兴趣的

一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍... 前言 2016.5到2017.5,我们三人(lvmememe, Shulin_Cao ,晨星落羽)共同完成了一个本科生科研项目——简体中文版儿童搜索引擎。在做的过程中我们发现,垂直搜索引擎...
【python】字典/dictionary操作 字典(dictionary)字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key=>value 对用冒号:分割,每个键值对之间用逗号,分割,整个字典包括在...
Resolve dns if hostname is resolvable else send as... There are times which you need to try to resolve valid hostnames, however on user’s input there c...
Go explore Tales of adventures in GoLand, one month in. I always wanted to have a proper look at Golang, for...
Stream & Go: News feeds for over 300 million u... ByThierry Schellenbach, CEO,Stream. Stream is an API that en...