是否有方法让线程在退出之前进入休眠状态?

时间:2015-07-24 09:11:40

标签: python class

import  time

class tA(obj):

    def __init__(self):
        pass

    def __del__(self):
        time.sleep(5)

我发现,当类tA被销毁时,它不会延迟5秒。 为什么?以及如何增加延迟?

是否有方法让线程在退出之前进入休眠状态?

2 个答案:

答案 0 :(得分:2)

它确实有效。您可能会对这样一个事实感到困惑:当您认为对象没有被破坏时 - 它可能会在稍后被破坏。有关详情,请参阅documentation,特别注意del x无法保证致电x.__del__

一般情况下,如果你没有足够的理由这样做(我实际上认为你没有),你不应该使用__del__,并且很少有足够的理由。

我发现实际调用该函数的情况例如是:

x = tA()
x = None # __del__ is called in my python

tA() # __del__ is called in my python

x = tA()
exit # __del__ is called in my python

x = tA()
del x # __del__ is NOT called in my python

至于在退出之前使线程休眠,你需要将睡眠置于线程代码中(注意__del__可能在任何线程中运行,并且当线程已经终止时),例如:< / p>

class tA(Thread):
    def run(self):
        try:
            do_your_stuff()
        finally:
            time.sleep(5)

请注意finally确保调用time.sleep(5)do_your_stuff()是否成功返回或引发异常。

答案 1 :(得分:-2)

>>> import time
>>> class test():
...     def __init__(self):
...             print "a"
...             time.sleep(5)
...     def __del__(self):
...             print "b"
...
>>> a=test()
a
b
>>>

例如它正在运作。 如果需要在类的最后一个函数中调用“sleep”。