python关于线程的一点问题?以及如何合适的结束线程?
目的
我写了一个Tkinter,按下按钮后执行事件,按下结束按钮停止事件。所以我想到了线程来做这件事,但是在python的线程当中遇到的一个问题就是:按下结束后,线程并没有完全结束。例如下述代码所示
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条语句就结束,
aa.start() time.sleep(10)
aa.terminate()
但是运行后输出了了12条数据,也就是说设置Event()并不能很好的结束,后面专用Multiprocessing process,可以达到目的,但是在Tkinter中创建多个进程会报错。
请问如何在python中能达到我这样的目的?
回答:
你每间隔 3 秒才检查一次,当然会有问题。检测频繁一点就可以了。
回答:
import threadingimport time
class ControlThread(threading.Thread):
#任务控制线程,每次点击开始按钮创建一个新的线程
def __init__(self):
self._stop_event = threading.Event()
threading.Thread.__init__(self)
def run(self):
count = 1
while not self.stopped():
time.sleep(1)
print("hello world: ", count)
count += 1
def terminate(self):
#标志位设置为False,停止线程
self._stop_event.set()
def stopped(self):
#返回当前线程是否停止
return self._stop_event.is_set()
aa = ControlThread()
aa.start()
time.sleep(10)
aa.terminate()
以上是 python关于线程的一点问题?以及如何合适的结束线程? 的全部内容, 来源链接: utcz.com/p/937628.html