多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

  • A+
所属分类:编程语言

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

并行 和 并发:

并行:多个CPU核心,不同的程序就分配给不同的CPU来运行。可以让多个程序同时执行。

cpu1 -------------

cpu2 -------------

cpu3 -------------

cpu4 -------------

并发:单个CPU核心,在一个时间切片里一次只能运行一个程序,如果需要运行多个程序,则串行执行。

cpu1  ----  ----

cpu1    ----  ----

多进程/多线程:

表示可以同时执行多个任务,进程和线程的调度是由操作系统自动完成。

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

Python的多线程:

GIL 全局解释器锁:线程的执行权限,在Python的进程里只有一个GIL。

一个线程需要执行任务,必须获取GIL。

好处:直接杜绝了多个线程访问内存空间的安全问题。

坏处:Python的多线程不是真正多线程,不能充分利用多核CPU的资源。

但是,在I/O阻塞的时候,解释器会释放GIL

所以:

多进程:密集CPU任务,需要充分使用多核CPU资源(服务器,大量的并行计算)的时候,用多进程。 multiprocessing

缺陷:多个进程之间通信成本高,切换开销大。

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

这次我们主要爬取,电影名字跟评分。只是使用不同方式去对比下不同点,所以数据方面就不过多提取或者保存。只是简单的将其爬取下打印出来看看。

第一:采用多进程 , multiprocessing 模块。 当然这个耗时更网络好坏有关。在全部要请求都正常的情况下耗时15s多。

Process多进程实现

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

采用多线程时,耗时10.4s

thread

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

采用协程爬取,耗时15S,

gevent

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

用了多进程,多线程,协程,实现的代码都一样,没有测试出明显的那个好!都不分上下,可能跟网络,或者服务器配置有关。

但理论上来说线程,协程在I/O密集的操作性能是要高于进程的。

也可能是我的方法有问题,还望大神们指教!

多进程/多线程/协程哪个最牛逼?分分钟给他扒下一个网站!Py牛逼

谢谢阅读!

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: