欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于多线程的那点事 -Python

程序员文章站 2022-05-02 16:55:45
...

关于多线程的那点事 -Python
推荐大家先了解一哈进程:从零开始的多进程生活 - Python

回头康一康

上一期呢,咱们把多进程给说的差不多了,只要我们想同时进行一些事情,处理器呢就会分配一定的资源,这个一定就是说,有低保的。

就比如说啊,假设咱们现在把另外一个次元的世界占领了,然后手下又有很多得力干将,就像分地给他们,就一大块一大块的分呗。

给小明一个外次元的美国,给小红一个外次元的英国…

这就叫分配一定的资源,就是你要给人家地,不会给的太少吧,比如给个外次元的日本,那就太小啦!!!

关于多线程的那点事 -Python

这就叫分进程!

就假如说我们给了小明一个很大的地方嘛,但是他又不可能全部利用上吧。

也就是说我们如果开了很多进程,但是这些进程有很多都是大材小用,反而占了很多资源,让我们的电脑变得非常非常卡!

所以,就需要线程出马啦~

也就是说,你给小明派到哪个国家的哪个省的哪个县,这样不但节省了资源,还提高了资源的利用率,对吧!

关于多线程的那点事 -Python

线程?线程!

先了解一件事:线程是分配资源的最小单位。

也就是说,利用好线程,就不存在资源上的浪费了嘛~

还有一件事:进程只是分配的资源,真正干事的,还是线程!

那你可能就要问了,我们之前明明开的是多进程,哪里来的线程呢,你简直是在开玩笑~

关于多线程的那点事 -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()

可以看到,多线程其实跟多进程是差不多的,也是很简单很简单的哈。

关于多线程的那点事 -Python

如 何 传 参

相信看过多进程的小伙伴,就会觉得这里我看过!

是的没错,多进程和多线程确实是挺像的,就连传参的方式,也是很像很像!

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()

不难吧,不会真的有人觉得难吧,不会吧不会吧…

关于多线程的那点事 -Python
如果哪里不理解的话,就在留言里问哦,尽量争取及时回答!

啪的一下就结束了…

不要问我为什么这么短,精悍!
关于多线程的那点事 -Python