使用螺纹时避免使用锅炉板。螺纹

时间:2015-01-22 15:35:14

标签: python

class MyThread(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)
        self._finished = False
        self._end = False
        self._running = False

    def run(self):
        self._running = True
        while not self._finished:
            time.sleep(0.05) 
        self._end = True

    def stop(self):
        if not self._running:
            return 

        self._finished = True
        while not self._end:
            time.sleep(0.05)

我希望有一个我可以调用run()和stop()的线程。 stop方法应该等待run以有序的方式完成。如果甚至没有调用run,我也想停止返回而没有任何问题。我该怎么做?

我在测试环境中的setup()方法中创建此线程,并在teardown()中对其运行stop。但是,在某些测试中,我不会调用run()。

更新

这是我的第二次尝试。现在是正确的吗?

import threading
import time
class MyThread(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)
        self._finished = False

    def run(self):
        while not self._finished:
            print("*")
            time.sleep(1) 
        print("Finished Other")

    def finish(self):
        self._finished = True
        self.join()     


m = MyThread()
m.start()
print("After")
time.sleep(5)
m.finish()
print("Finished Main")

1 个答案:

答案 0 :(得分:2)

您不需要也不应该自己实现。您正在寻找的东西已经存在,至少在很大程度上是存在的。然而,它并未被称为"停止"。您描述的概念通常称为"加入"。

查看加入的文档:https://docs.python.org/3.4/library/threading.html#threading.Thread.join

你写

  

stop方法应该等待运行以有序的方式完成。

加入的文档说:"等到线程终止。" 检查✓

你写

  

如果运行还没有任何问题,我也希望停止返回   称为

加入的文档说:"在线程启动之前加入()线程也是错误的#34;

因此,您唯一需要确保的是,只有在通过join()方法启动线程后才能调用start()。这对你来说应该很容易。