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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值