python多线程之 终止子线程

        python程序的运行是由一个或者多个进程来进行执行的,但是具体的实现和内存的占用还是由进程内的线程去完成的。简单的说,一个进程由多个线程组成,不同的线程会完成不同的任务。

        可以用threading.activeCount()来查看正在运行的线程数量。

终止线程的一些方法:

1、设置一个退出标志flag:
        一个比较好用的方式就是在每一个线程后面都加上一个退出的请求标志,表示在执行完成后就自动的退出,不再占用资源和内存。

        在线程的run方法中可以根据这个标志位是为true还是为false来判断是否满足终止条件,这种情况多用于while循环中。

Threads = []
# 将会启动与搜索结果等量个线程,线程满足一定条件时则全部线程终止!
for i in range(0,len(self.g_results)):
    t = threading.Thread(target=self.get_page,args=(i+1,))
    t.daemon = 1
    Threads.append(t)
# 启动所有线程
for i in Threads:
    i.start()
# 当标志位【 flag 】时所有多线程结束
while 1:
    if self.__flag:
    break

 或者

# 导入线程操作模块threading
import threading
# 定义一个函数在执行完毕后自动退出
def __init__(self):
        super(this, self).__init__()
        self._stop_event = threading.Event()

2、使用 stop() 方法强行终止线程
        但是不推荐使用这个方法,因为使用此方法不安全,目前该方法已被弃用;

3、使用 interrupt()方法中断线程
        断线程时并不会立即终止线程,而是通知目标线程,告诉它有人希望你终止。至于目标线程收到通知后会如何处理,则完全由目标线程自行决定。

4、异常处理停止

        在python之中停止一个线程可以raise一个Exception,也就是是异常来停止线程。这个方法的缺点在于如果线程在解释器busy之外,那么就无法捕获异常。应该指定一个异常然后清理就能停止线程了,示例如下:

# 定义一个函数表示线程
def counts(flag):
# 进入函数就强制捕获异常来停止线程
    if flag:
        raise ValueError("数据错误")

  • 10
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值