python关于线程的一点问题?以及如何合适的结束线程?

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 threading

import 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

回到顶部