在python3中停止线程

Baz*_*Baz 8 python-3.x

我怎样才能更好地编写以下课程?例如,有一个很好的方法可以使两个标志is_alive和is_finished滑动吗?

Monitor(threading.Thread):
    def run(self):
        resource = Resource("com1")

        self.alive = True
        self.is_finished = False
        try:
            while self.alive:
                pass # use resource
        finally:
            resource.close()
            self.is_finished = True    

    def stop(self):
        self.alive = False
        while not self.is_finished:
            time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud)

Tho*_*s K 8

这就是它.但是,您不需要is_finished,因为您可以使用以下join()方法:

Monitor(threading.Thread):
    def run(self):
        resource = Resource("com1")

        self.alive = True
        try:
            while self.alive:
                pass # use resource
        finally:
            resource.close()

    def stop(self):
        self.alive = False
        self.join()
Run Code Online (Sandbox Code Playgroud)

如果你确实需要查找一个线程是否正在运行,你可以调用mythread.is_alive()- 你不需要自己设置它.