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")
答案 0 :(得分:2)
您不需要也不应该自己实现。您正在寻找的东西已经存在,至少在很大程度上是存在的。然而,它并未被称为"停止"。您描述的概念通常称为"加入"。
查看加入的文档:https://docs.python.org/3.4/library/threading.html#threading.Thread.join
你写
stop方法应该等待运行以有序的方式完成。
加入的文档说:"等到线程终止。" 检查✓
你写
如果运行还没有任何问题,我也希望停止返回 称为
加入的文档说:"在线程启动之前加入()线程也是错误的#34;
因此,您唯一需要确保的是,只有在通过join()
方法启动线程后才能调用start()
。这对你来说应该很容易。