Python入门(二十七)——线程深入复习(.tart()、 .join()、.setDaemon(True))

1. .tart()方法

在threading模块中,start()方法其实跑的就是类中的run()函数,因此会见到有些类直接继承threading之后,编辑run()函数即可实现功能。

import threading, time

class MyThread(threading.Thread):
    def run(self):
        start = time.time()
        sum = 0
        for i in range(100000000):
            sum += i
        end = time.time()
        print(self, sum, end-start)

t1 = MyThread()
t1.start()
t2 = MyThread()
t2.start()
print('主线程也在跑')

完全与一般写法实现了同样的效果,而且能用反复使用一个函数
运行结果:可以发现,主线程和子线程是竞争关系,谁跑的快谁先结束,不过主线程会等待子线程结束后再退出
在这里插入图片描述

2. .join()方法

import threading, time

class MyThread(threading.Thread):
    def __init__(self, arg):
        threading.Thread.__init__(self)
        self.arg = arg

    def run(self):
        start = time.time()
        sum = 0
        for i in range(self.arg): #(100000000):
            sum += i
        end = time.time()
        print(self, sum, end-start)

t1 = MyThread(10000000)
t2 = MyThread(100000000)
t1.start()
t2.start()
t1.join()
print('主线程也在跑')

运行结果:可以发现,在主线程遇到某个子线程的join方法之后会在该句话上昌盛阻塞
在这里插入图片描述

3. .setDaemon(True)方法守护线程(守护主线程)

  • 加入join方法,setDaemon方法就没有作用了
  • 如果其它线程需要主线程等待,主线程还是不会结束
  • 必须在启动前设置。RuntimeError: cannot set daemon
import threading, time

class MyThread(threading.Thread):
    def __init__(self, arg):
        threading.Thread.__init__(self)
        self.arg = arg

    def run(self):
        start = time.time()
        sum = 0
        for i in range(self.arg): #(100000000):
            sum += i
        end = time.time()
        print(self, sum, end-start)

t1 = MyThread(10000000)
t2 = MyThread(100000000)
t1.setDaemon(True)
t1.start()
#t1.join()  # 加入join方法,setDaemon方法就没有作用了
#t2.start() # 如果其它线程需要主线程等待,主线程还是不会结束
# t1.setDaemon(True)  # 必须在启动前设置。RuntimeError: cannot set daemon status of active thread
print('主线程也在跑')

运行结果:主线程如果先结束就不会等待子线程
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值