Python效率之王之多进程和多线程详解_python 多线程宠物实力

本指南的目的是解释为什么在Python中需要多线程和多处理,何时使用多线程和多处理,以及如何在程序中使用它们。

文章太长不想看?这里是内容摘要啦~

  • 对于IO-bound任务,使用多线程可以提高性能
  • 对于IO-bound任务,使用多进程也可以提高性能,但是开销往往比使用多线程要高
  • Python GIL意味着在Python程序的任意给定时间内只能执行线程
  • 对于CPU bound任务,使用多线程实际会降低性能
  • 对于CPU bound任务,使用多进程可以提高性能
  • 巫师真的很棒!

**故事开始:**
很久很久以前,在一个遥远的星系里……

一个聪明而强大的巫师住在一个偏僻的小村庄里。我们叫他邓布利多吧。他不仅聪明、有能力,而且乐于帮助任何请求帮助的人,这意味着人们从四面八方来请求巫师的帮助。我们的故事开始于一个晴朗的日子,一个年轻的旅行者给巫师带来了一卷魔法卷轴。旅行者不知道卷轴里装的是什么,但他知道,如果有人能破译出卷轴的秘密,那一定是伟大的巫师邓布利多。

单线程 单进程

如果你还没有猜出来我这个故事的内涵,其实我是在比喻关于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函数的输入是要应用于每个项目的函数和项目列表

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

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

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

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

二、学习软件

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

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

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

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

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

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值