在 Python3 中,主线程和子线程是相互独立的,主线程无法直接销毁子线程。但是,可以通过设置子线程的标志位或者调用子线程的 join() 方法来通知子线程退出。
下面是两种常用的方法:
1. 设置子线程标志位
在子线程中,可以定期检查一个标志位,如果标志位为 True,则退出线程。主线程可以通过设置标志位来通知子线程退出。
例如:
```python
import threading
import time
class MyThread(threading.Thread):
def __init__(self):
super().__init__()
self.flag = False
def run(self):
while not self.flag:
print('子线程正在执行...')
time.sleep(1)
print('子线程退出')
def stop(self):
self.flag = True
t = MyThread()
t.start()
time.sleep(5)
t.stop()
```
在子线程中,定期检查标志位 self.flag 的值,如果为 True,则退出线程。在主线程中,等待 5 秒后,设置标志位 t.stop(),通知子线程退出。
2. 调用子线程的 join() 方法
在主线程中,可以调用子线程的 join() 方法,等待子线程执行完毕。如果子线程一直处于阻塞状态,则 join() 方法会一直阻塞,直到子线程退出。
time.sleep(10)
print('子线程执行完毕')
t.join()
print('主线程退出')
在主线程中,调用子线程的 join() 方法,等待子线程执行完毕。当子线程执行完毕后,主线程才会退出。