Concurrency_Programming

【Python教學】淺談 Concurrency Programming

發佈於 發佈留言分類: 02 Python 基礎教學03 Python 爬蟲教學10 所有文章

一. 為什麼需要 Concurrency ? 簡單來說 Concurrency Programming 就是能在同一時刻做兩件以上事情的能力,例如使用不同 CPU 分別運行程式來提高效率 ,或是當程式在等待執行結果時 (如等待 request 請求),先執行其他程式函式 (Coroutine),把浪費的 CPU 週期充分利用! 我們來看看 Golang 開發者之一 Rob Pike 對 Concurrency 的定義: Concurrency is about dealing with lots of things at once.Parallelism is about doing lots of things at once. Concurrency is not Parallelism […]

mutli_processing_pool

【Python教學】淺談 Multi-processing pool 使用方法

發佈於 發佈留言分類: 02 Python 基礎教學03 Python 爬蟲教學10 所有文章

一. 簡單的 Multi-processing pool 範例 使用 Python 標準庫內 multiprocessing 寫一個 multi-processing pool (多處理程序池 / 多進程池),簡單的範例如下: 二. 建議使用處理程序 (process) 數量 可使用 multiprocessing.cpu_count() 或 os.cpu_count() 來獲取當前機器的 CPU 核心數量。 假設目前 CPU 是四核,那麼 process 設定如果超過 4 的話,代表有個核會同時運行 2 個以上的任務,而 CPU 之間程序處理會切換造成本進而降低處理效率,所以建議設置 process 時,最好等於當前機器的 CPU 核心數量。 三. 了解 pool 能調用的方法(met […]

python_threading_processing

【Python教學】淺談 Multi-processing & Multi-threading 使用方法

發佈於 發佈留言分類: 03 Python 爬蟲教學10 所有文章

一. Multi-processing 和Multi-threading 的優缺點: Multi-processing (多處理程序/多進程): 資料在彼此間傳遞變得更加複雜及花時間,因為一個 process 在作業系統的管理下是無法去存取別的 process 的 memory 適合需要 CPU 密集,像是迴圈計算 Multi-threading (多執行緒/多線程): 資料彼此傳遞簡單,因為多執行緒的 memory 之間是共用的,但也因此要避免會有 Race Condition 問題 適合需要 I/O 密集,像是爬蟲需要時間等待 request 回覆 關於多執行緒在 Python 中受 GIL 的限制,推薦延伸閱讀:【Python教學】淺談 GIL & Thread-safe &a […]