Ros*_*s W 5 python multithreading
我在Python中有一个线程程序工作正常,但是一旦线程运行就不会调用__del__:
class tt(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.stop_event = threading.Event()
def __del__(self):
print "Deleting"
self.stop_event.set()
time.sleep(5)
def run(self):
self.stop_event.clear()
while not self.stop_event.isSet():
self.do_stuff()
threading.Thread.__init__(self)
def stop(self):
self.stop_event.set()
Run Code Online (Sandbox Code Playgroud)
例如,如果我这样做
tc = aa()
del tc
Run Code Online (Sandbox Code Playgroud)
它工作正常(我得到删除消息暂停等).但是,如果我这样做:
tc = aa()
tc.start()
del tc
Run Code Online (Sandbox Code Playgroud)
然后__del__没有运行(注意当我执行tc.start(); tc.stop(); del tc时它会执行__del__.
我在ipython中运行它
__del__()当实例被垃圾收集时执行该方法,而不是在您调用del恰好指向该实例的名称时执行.后者只会删除名称(在某些情况下可能会导致名称为gc'ed的实例).
一个threading.Thread实例将永远不会被垃圾收集,而线程仍在运行,因为实例仍然在这种情况下使用.抛弃恰好指向实例的名称肯定不会阻止该线程.
| 归档时间: |
|
| 查看次数: |
4338 次 |
| 最近记录: |