python退出子线程的两种方式
在python中开启一个线程是很容易的, 通过threading模块定义一个线程, 直接调用start 方法即可启动线程。但是想要停止一个线程不是那么容易, 没有提供直接的方法可以调用。 但是我们仍然可以通过其他方法间接实现这一功能。
1 方式1: 通过守护线程
守护线程是在主线程结束后自动结束的线程。 如果想要让子线程随主线程自动结束, 可以通过把线程设置为守护线程来实现。核心就是在定义线程时多加thread1.daemon = True
这行代码。
import threading
import time
def my_func():
index = 0
while True:
print(index)
index += 1
time.sleep(1)
thread1 = threading.Thread(target=my_func)
thread1.daemon = True
thread1.start()
time.sleep(5)
print("主线程结束退出")
2 方式2:通过设置标志位
如果想要在任何地方随时停止子线程, 可以通过设置标志位的方式。 通过标志位控制子线程执行的逻辑。 满足一定条件时才让子线程执行。
如下代码中, 在子线程中加入一个标志位参数, 子线程中实时检测标志位, 想要停止子线程时, 就改变标志位。
下面的程序中, 可以随时结束子线程, 而主线程仍然还在运行。
import threading
import time
def my_func(stop_event):
index = 0
while not stop_event.is_set():
print(index)
index += 1
time.sleep(1)
stop_event = threading.Event()
thread1 = threading.Thread(target=my_func, args=(stop_event,))
thread1.start()
for i in range(20):
if i == 5:
stop_event.set() ## 改变标志位, 结束子线程
print("\n主线程正在执行")
time.sleep(1)
作者:leo0308