线程冻结程序

时间:2017-11-16 20:45:09

标签: python multithreading class

我有一个功能:

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

的功能

1 个答案:

答案 0 :(得分:1)

handle.join()的调用将等待handle表示的线程完成。由于它有一个while True,它永远不会完成,因此连接永远不会终止。 你几乎肯定不想在你打算永远运行的线程上join。 解决问题很简单,只需删除handle.join()