gpt4 book ai didi

python - 在 python 中,有没有办法让线程在不再引用它们时死亡?

转载 作者:太空狗 更新时间:2023-10-30 01:34:56 27 4
gpt4 key购买 nike

有时我想要一个由它在创建时产生的工作线程不断更新的类。基本上是这样的:

class MyWidget:
def __init__(self):
self.blah = None
self.thread = MyThread(self)
self.thread.start()

def update(self, blah):
self.blah = blah

class MyThread(threading.Thread):
def __init__(self, widget):
self.widget = widget

def run(self):
while True:
time.sleep(1)
blah = poll()
self.widget.update(blah)

我想要一种安全的方法来设计它,以便我确定当不再需要 MyWidget 时线程会终止。上面代码的问题是 MyWidget 永远不会死,因为它由 MyThread 保持事件状态。我可以通过给 MyThread 一个 weakref.refMyWidget 并在引用结束时中断循环来解决这个问题,但我犯了一个错误过去没有这样做。

我真正喜欢的是能够与其他所有内容一起收集垃圾的线程。 IE。当它的引用图和主线程的引用图不相交时被杀死的线程。有可能写出这样的野兽吗?它们已经存在了吗?

最佳答案

如果修改 MyThread 以提供 stop 方法:

class MyThread(threading.Thread):
def __init__(self, widget):
self.widget = widget
self.is_running = False
super(MyThread, self).__init__()

def run(self):
self.is_running = True
while self.is_running:
time.sleep(1)
blah = poll()
self.widget.update(blah)

def stop(self):
self.is_running = False

如果在不再需要您的 MyWidget 实例时,您可以调用 widget.thread.stop(),这将终止线程并允许一切正常GC。

关于python - 在 python 中,有没有办法让线程在不再引用它们时死亡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12470479/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com