关于多线程的那点事之番外篇 -Python

上一篇:关于多线程的那点事 -Python

关于多线程的那点事之番外篇 -Python_第1张图片
哈喽各位小伙伴,很快啊,小泽马上就又更新了,速度简直不要太快!

上回咱们不是说了怎么开多线程嘛,那同样的,还有一个问题:

公司已经下班了,但是员工还在努力工作。

我们先来创建两个员工:

# 导入线程模块
import threading
# 导入休眠模块
from time import sleep

# 员工A
def funcA(a):
    for i in range(10):
        print('{0}为工作狂!'.format(a))
        sleep(0.3)

# 员工B
def funcB(a):
    for i in range(20):
        print('{0}也不能阻止我工作!'.format(a))
        sleep(0.3)

这两个员工呢,第一个是每隔0.3秒会工作一次,一共工作10次,也就是要3秒才可以下班。

第二个是每隔0.3秒工作一次,但是要工作20次!也就是要6秒才可以下班。

关于多线程的那点事之番外篇 -Python_第2张图片
接着,我们再开两个线程,并且让他们跑起来,同时再给公司设定一个下班时间:

if __name__ == '__main__':

    # 创建线程对象
    thread_A = threading.Thread(target=funcA, args=('小明',))
    thread_B = threading.Thread(target=funcB, kwargs={
     'a': '小红'})
    
    # 启动线程
    thread_A.start()
    thread_B.start()

    sleep(2)
    print('下班了下班了,大家快走鸭!')

可以看到,我们创建了两个线程,分别对应两个员工,因为python读代码是从上往下读嘛,所以只要这两个线程一启动,就会开始计时,等到2秒的时候,就会下班啦~

也就是程序按理来说应该就要结束了,毕竟下面没有代码了嘛~

看看效果:

关于多线程的那点事之番外篇 -Python_第3张图片
可以看到,哪怕是公司已经说了要下班了,但是两位员工还是非常勤奋努力的在工作哈,非常棒!

但是呢,我们想要的是公司一下班,员工立马滚蛋~

关于多线程的那点事之番外篇 -Python_第4张图片
这个时候就要用到守护线程了!!!

没错!!!!

跟进程是一毛一样的!!!!!

关于多线程的那点事之番外篇 -Python_第5张图片
那咋整啊,看我操作呗:

    # # 创建线程对象
    # thread_A = threading.Thread(target=funcA,args=('小明',))
    # thread_B = threading.Thread(target=funcB,kwargs={'a':'小红'})

    # 创建线程对象,并且守护主线程
    thread_A = threading.Thread(target=funcA, args=('小明',), daemon=True)
    thread_B = threading.Thread(target=funcB, kwargs={
     'a': '小红'}, daemon=True)

我们只需要在创建线程对象里面传一个daemon=True就好啦!

这样我们再来跑一次康康:

关于多线程的那点事之番外篇 -Python_第6张图片
舒服了~

关于多线程的那点事之番外篇 -Python_第7张图片
这样就能做到,只要我们的主线程一关闭,主线程下面的子线程就全部跟着关闭,而不是等子线程都运行完再关闭!

那么,还有一个问题哈,就是如果我们要一次性启动一万个线程,那不是得写一万行?

所以这当然不行啊!

那就得教各位怎么快速的批量启动线程:

if __name__ == '__main__':
    
    # 循环启动10次线程,也就是开10个线程
    for i in range(10):
        thread = threading.Thread(target=funcA,args=('小明',))
        thread.start()

是不是瞬间就顿悟了!

如果你还没有悟到,没关系,知道是这样用的,就ok了~

毕竟牵扯到的都是基础啦…


886~

你可能感兴趣的:(Python,python,多线程)