作者:枝玫焰 | 来源:互联网 | 2023-10-10 16:17
目的
我写了一个Tkinter,按下按钮后执行事件,按下结束按钮停止事件。所以我想到了线程来做这件事,但是在python的线程当中遇到的一个问题就是:按下结束后,线程并没有完全结束。例如下述代码所示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class ControlThread(threading.Thread):
#任务控制线程,每次点击开始按钮创建一个新的线程
def __init__(self):
self._stop_event = threading.Event()
threading.Thread.__init__(self)
def run(self):
while not self.stopped():
print("hello world")
time.sleep(1)
print("hello world2")
time.sleep(1)
print("hello world3")
time.sleep(1)
def terminate(self):
#标志位设置为False,停止线程
self._stop_event.set()
def stopped(self):
#返回当前线程是否停止
return self._stop_event.is_set() |
每三秒会输出上面的三条字符串,如果我让他运行10秒,我的目的是让他输出10条语句就结束,
1 2 3
| aa.start()
time.sleep(10)
aa.terminate() |
但是运行后输出了了12条数据,也就是说设置Event()并不能很好的结束,后面专用Multiprocessing process,可以达到目的,但是在Tkinter中创建多个进程会报错。
请问如何在python中能达到我这样的目的?