关于多线程的那点事 -Python
推荐大家先了解一哈进程:从零开始的多进程生活 - Python
回头康一康
上一期呢,咱们把多进程给说的差不多了,只要我们想同时进行一些事情,处理器呢就会分配一定的资源,这个一定就是说,有低保的。
就比如说啊,假设咱们现在把另外一个次元的世界占领了,然后手下又有很多得力干将,就像分地给他们,就一大块一大块的分呗。
给小明一个外次元的美国,给小红一个外次元的英国…
这就叫分配一定的资源,就是你要给人家地,不会给的太少吧,比如给个外次元的日本,那就太小啦!!!
这就叫分进程!
就假如说我们给了小明一个很大的地方嘛,但是他又不可能全部利用上吧。
也就是说我们如果开了很多进程,但是这些进程有很多都是大材小用,反而占了很多资源,让我们的电脑变得非常非常卡!
所以,就需要线程出马啦~
也就是说,你给小明派到哪个国家的哪个省的哪个县,这样不但节省了资源,还提高了资源的利用率,对吧!
线程?线程!
先了解一件事:线程是分配资源的最小单位。
也就是说,利用好线程,就不存在资源上的浪费了嘛~
还有一件事:进程只是分配的资源,真正干事的,还是线程!
那你可能就要问了,我们之前明明开的是多进程,哪里来的线程呢,你简直是在开玩笑~
其实每开一个进程里面就会默认有一个线程。
没有交易,就没有伤害,让我们少开一个进程,拯救一个线程!
那么那么那么,也就是说进程只是线程的容器喽,真正干活的,还是线程!
但是啊,一个进程分配的资源是固定的嘛,里面的线程默认是一个,也就是说浪费了很多资源鸭,一个进程是不可能只能开一个线程的吧。
所以啊,就有了我们的多线程!
实战!!!
那么,就祭出我们的两个函数:
def funcA():
for i in range(10):
print('我为工作狂!')
sleep(0.3)
def funcB():
for i in range(20):
print('谁也不能阻止我工作!')
sleep(0.3)
这是两个函数,也是我们两个亲爱的员工~
现在呢,我们就要利用线程,来让他们实现同时工作!
老传统了,先导入线程模块呗:
# 导入线程模块
import threading
# 导入休眠模块
from time import sleep
其实大致的流程跟进程是一样的,可以说是差不多的,接下来就创建线程对象呗!
if __name__ == '__main__':
# 创建线程对象
thread_A = threading.Thread(target=funcA)
thread_B = threading.Thread(target=funcB)
然后呢…就启动线程呗~
# 启动线程
thread_A.start()
thread_B.start()
可以看到,多线程其实跟多进程是差不多的,也是很简单很简单的哈。
如 何 传 参
相信看过多进程的小伙伴,就会觉得这里我看过!
是的没错,多进程和多线程确实是挺像的,就连传参的方式,也是很像很像!
def funcA(a):
for i in range(10):
# 看不懂的话…百度一下format
print('{0}为工作狂!'.format(a))
sleep(0.3)
if __name__ == '__main__':
# 创建线程对象,切记,不带逗号不是元组
thread_A = threading.Thread(target=funcA,args=('小明',))
# 启动线程
thread_A.start()
上面的代码呢吗,就是一个需要传参的函数,和一个传参的线程。
同样的,不光有元组的传参方式,还有字典的传参方式!
def funcB(a):
for i in range(20):
print('{0}也不能阻止我工作!'.format(a))
sleep(0.3)
if __name__ == '__main__':
# 创建线程对象
thread_B = threading.Thread(target=funcB,kwargs={'a':'小红'})
# 启动线程
thread_B.start()
不难吧,不会真的有人觉得难吧,不会吧不会吧…
如果哪里不理解的话,就在留言里问哦,尽量争取及时回答!
啪的一下就结束了…
不要问我为什么这么短,精悍!
上一篇: 关于运用多线程遇到的问题