Python3 项目主线程如何销毁子线程?

关注者
4
被浏览
1,608
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

在 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() 方法会一直阻塞,直到子线程退出。


例如:


```python

import threading

import time


class MyThread(threading.Thread):

def __init__(self):

super().__init__()


def run(self):

time.sleep(10)

print('子线程执行完毕')


t = MyThread()

t.start()


t.join()

print('主线程退出')

```

在主线程中,调用子线程的 join() 方法,等待子线程执行完毕。当子线程执行完毕后,主线程才会退出。

发布于 2023-03-20 11:47 ・IP 属地四川