2024年Python效率之王之多进程和多线程详解_python 多线程宠物实力,字节面试官你有什么问题想问我

最后

Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

👉Python所有方向的学习路线👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

👉Python必备开发工具👈

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

👉Python全套学习视频👈

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

👉实战案例👈

学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。

因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。

👉大厂面试真题👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果你还没有猜出来我这个故事的内涵,其实我是在比喻关于CPU及其功能的。我们的巫师是CPU,而魔法卷轴是一个url列表,它可以引导Python的强大功能和使用该功能的知识。

巫师没费多大力气就破译了卷轴,他的第一个念头就是派他信任的朋友到卷轴上给出的每一个位置去看看并带回他能找到的东西。
在这里插入图片描述
如您所见,我们只是使用for循环一个接一个地遍历url并读取响应。多亏了从IPython获得的%%time的魔力,我们能够看到用这个糟糕的方法需要花费12秒。

多线程

巫师的智慧在这片土地上闻名遐迩,他很快就想出了一个更有效的方法。与其将一个人按顺序送到每个地点,不如召集一群(值得信任的)人,同时将他们分别发送到每个地点! 一旦他们都回来了,巫师就可以简单地把他们带回来的一切结合起来。

没错,我们可以使用多线程来同时访问多个url,而不是一个接一个地遍历列表。
在这里插入图片描述
在这里插入图片描述
这样就好多啦!使用多线程可以显著加快许多与 IO-bound的任务。在这里,读取 URLs 所花费的大部分时间是由于网络延迟。 IO-bound程序大部分时间都在等待输入和输出(您猜对了,类似于巫师需要等待他的朋友/朋友到卷轴中给定的位置并返回)。这可能是来自网络、数据库、文件甚至用户的I/O。这种I/O往往要花费大量的时间,因为源本身可能需要在传递I/O之前执行自己的处理。例如,CPU的工作速度比网络连接传输数据的速度快得多。
注意:多线程在网络数据抓取等任务中非常有用。

多进程

随着时间的流逝,我们巫师的名气越来越大,一个相当讨厌的黑巫师在嫉妒的驱使下,使用狡猾的手段对邓布利多下了一个可怕的咒语。咒语一解开,邓布利多就知道他只有片刻的时间可以打破它。绝望中,他翻遍了自己的咒语书,找到了一个似乎可以奏效的反咒。唯一的问题是,它要求他计算所有质数之和低于100万。

现在,巫师知道,如果有足够的时间,计算值将是微不足道的,但是时间并不是他所拥有的奢侈品。虽然他是一个巫师,但他也受到人性的限制,一次只能计算一个数字。如果是的话,要一个一个地把质数加起来,那就太费时间了。在还剩几秒钟的时候,他突然想起了多年前从魔法卷轴中学到的多重处理咒语。这个咒语可以让他复制自己,把这些数字分开,他就可以同时检查多个数字是否是质数。最后,他所要做的就是把他和他的副本发现的所有质数加起来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于现代CPU通常有多个核心,我们可以通过使用多进程模块来加快CPU绑定任务的速度。CPU绑定任务是花费大部分时间在CPU上执行计算的程序(数学计算、图像处理等)。如果计算可以彼此独立地执行,我们就可以将它们分配到可用的CPU内核中,从而显著提高处理速度。

你所要做的就是;

  1. 定义要应用的函数
  2. 准备要应用的函数列表
  3. 使用多进程池生成进程,传递给Pool()的数目将是派生进程的数目。嵌入with语句可以确保进程在执行完成后被终止。
  4. 使用进程池的map函数组合输出,map函数的输入是要应用于每个项目的函数和项目列表

注意:可以定义该函数,以便执行可以并行执行的任务。例如,函数可能包含将计算结果写入文件的代码


那么,为什么我们需要单独的多进程和多线程呢?如果你尝试使用多线程来提高CPU bound任务,你可能会注意到,实际得到的是性能下降。让我们看看为什么会这样。

就像巫师收到人性的限制,每次只能计算一个数字一样,Python也带有一种称为全局解释器锁(GIL)的东西。Python很乐意让你生成任意数量的线程,但GIL确保在任何给定时间只有一个线程可以执行。

对于IO-bound任务,这非常好。一个线程向URL发出请求,当他等待响应时,他可以将该线程替换为向另一个URL发出另一个请求的另一个线程。因为一个线程在收到响应之前不需要做任何事,所以在给定的时间内只执行一个线程并不重要。

对于CPU bound任务,多线程并没有什么用。因为一次只执行一个线程,即使生成多个线程,并且每个线程都有自己要检查的素数,CPU仍然一次只处理一个线程。实际上,这些数字仍然会被一个接一个的检查。如果在CPU bound 任务中使用多线程,那么处理多线程的开销将导致性能下降。


为了克服这个“限制”,我们使用了多进程模块。多进程不是使用线程,而是使用多个进程。每个进程都有自己的解释器和内存空间,因为GIL不会组织任何事情。本质上,每个进程使用不同的CPU内核同时处理不同的数字。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值