上一篇:关于多线程的那点事 -Python
哈喽各位小伙伴,很快啊,小泽马上就又更新了,速度简直不要太快!
上回咱们不是说了怎么开多线程嘛,那同样的,还有一个问题:
公司已经下班了,但是员工还在努力工作。
我们先来创建两个员工:
# 导入线程模块
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秒才可以下班。
接着,我们再开两个线程,并且让他们跑起来,同时再给公司设定一个下班时间:
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秒的时候,就会下班啦~
也就是程序按理来说应该就要结束了,毕竟下面没有代码了嘛~
看看效果:
可以看到,哪怕是公司已经说了要下班了,但是两位员工还是非常勤奋努力的在工作哈,非常棒!
但是呢,我们想要的是公司一下班,员工立马滚蛋~
没错!!!!
跟进程是一毛一样的!!!!!
# # 创建线程对象
# 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就好啦!
这样我们再来跑一次康康:
这样就能做到,只要我们的主线程一关闭,主线程下面的子线程就全部跟着关闭,而不是等子线程都运行完再关闭!
那么,还有一个问题哈,就是如果我们要一次性启动一万个线程,那不是得写一万行?
所以这当然不行啊!
那就得教各位怎么快速的批量启动线程:
if __name__ == '__main__':
# 循环启动10次线程,也就是开10个线程
for i in range(10):
thread = threading.Thread(target=funcA,args=('小明',))
thread.start()
是不是瞬间就顿悟了!
如果你还没有悟到,没关系,知道是这样用的,就ok了~
毕竟牵扯到的都是基础啦…
886~