我有一个功能:
def threaded(fn):
def wrapper(*args, **kwargs):
thread = threading.Thread(target=fn, args=args, kwargs=kwargs)
thread.start()
return thread
return wrapper
一堂课:
class someclass(somestuff):
def __init__(self, parent=None):
super(thing)
.
.
.
@threaded
def start_thread(self):
while True:
self.update_watchers()
def update_watchers(self):
.
.
.
def otherfunctions(self):
.
.
.
.
在我的主要内容中:
obj = someclass()
handle = obj.start_thread()
handle.join()
现在,如果我从while
中取出start_thread
循环,一切正常。我怀疑我使用的是永久线程(永远的线程是一个线程,只要程序正在运行,当然)。
作为一个FYI,该程序占据了一个列表。不是Python列表,GUI列表。它会查找一个不断更新的文件。 update_watchers()
更新我在文件上运行的观察者,在(例如)程序暂停时提取信息(这是我需要线程的几个原因之一)。
有人可以向我解释发生了什么事吗?当我达到handle
的定义时,它会不断破碎。我知道我必须使用While循环错误,并且有一个正确的方法来做到这一点。我需要start_thread一直运行,因为我需要update_watchers一直运行。
我真的不能发布更多的代码。
谢谢
修改:threaded
取自this post
答案 0 :(得分:1)
对handle.join()
的调用将等待handle
表示的线程完成。由于它有一个while True
,它永远不会完成,因此连接永远不会终止。
你几乎肯定不想在你打算永远运行的线程上join
。
解决问题很简单,只需删除handle.join()
。