您的位置:首頁>正文

多進程/多執行緒/協程哪個最牛逼?分分鐘給他扒下一個網站!Py牛逼

並行 和 併發:

並行:多個CPU核心, 不同的程式就分配給不同的CPU來運行。 可以讓多個程式同時執行。

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

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

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

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

併發:單個CPU核心, 在一個時間切片裡一次只能運行一個程式, 如果需要運行多個程式, 則串列執行。

cpu1 ---- ----

cpu1 ---- ----

多進程/多執行緒:

表示可以同時執行多個任務, 進程和執行緒的調度是由作業系統自動完成。

Python的多執行緒:

GIL 全域解譯器鎖:執行緒的執行許可權, 在Python的進程裡只有一個GIL。

一個執行緒需要執行任務, 必須獲取GIL。

好處:直接杜絕了多個執行緒訪問記憶體空間的安全問題。

壞處:Python的多執行緒不是真正多執行緒, 不能充分利用多核CPU的資源。

但是, 在I/O阻塞的時候, 解譯器會釋放GIL

所以:

多進程:密集CPU任務, 需要充分使用多核CPU資源(伺服器, 大量的平行計算)的時候,

用多進程。 multiprocessing

缺陷:多個進程之間通信成本高, 切換開銷大。

這次我們主要爬取, 電影名字跟評分。 只是使用不同方式去對比下不同點, 所以資料方面就不過多提取或者保存。 只是簡單的將其爬取下列印出來看看。

第一:採用多進程 , multiprocessing 模組。 當然這個耗時更網路好壞有關。

在全部要請求都正常的情況下耗時15s多。

Process多進程實現

採用多執行緒時, 耗時10.4s

thread

採用協程爬取,耗時15S,

gevent

用了多進程,多執行緒,協程,實現的代碼都一樣,沒有測試出明顯的那個好!都不分上下,可能跟網路,或者伺服器配置有關。

但理論上來說執行緒,協程在I/O密集的操作性能是要高於進程的。

也可能是我的方法有問題,還望大神們指教!

謝謝閱讀!

採用協程爬取,耗時15S,

gevent

用了多進程,多執行緒,協程,實現的代碼都一樣,沒有測試出明顯的那個好!都不分上下,可能跟網路,或者伺服器配置有關。

但理論上來說執行緒,協程在I/O密集的操作性能是要高於進程的。

也可能是我的方法有問題,還望大神們指教!

謝謝閱讀!

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示