Concurrency_Programming

【Python教學】淺談 Concurrency Programming

一. 為什麼需要 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 […]

閱讀全文
python_selenium_driver

【爬蟲教學】如何讓 Selenium 多線池執行時 driver 不會重複開啟

本篇主要紀錄使用 Selenium 搭配 Multi-threading Pool (多執行緒池/多線程池) 遇到 web driver 會重複開啟和關閉的問題,導致效率大幅下降,解決方法是使用 threading.local 將 driver 變數存 local 來判斷是否有需要重複開啟 使用 threading.local() 利用 threading.local() 的方法將 driver 變數存在 thread 線程內,當每次 thread 線程重新執行時會先 getattr 看看有無 driver 沒有的話就會重新開啟。

當執行噴錯時,可以在 except 內把 driver 關閉,並輸入 setattr(self. […]

閱讀全文
multithreadpool

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

先來看一下執行 Multi-threading Pool (多執行緒池/多線程池) 後,可以將每一個頁面原本需要等待 15 s 才能載入完畢並爬取的頁面,降至 3.9 秒 (10 threading pool) ~ 2.28 秒(25 threading pool),但是多線程池的使用要非常留意 tread-safe 問題 ,不小心就會像上面圖片一樣,想像中大家是各自完成任務,但實際上是亂七八糟的執行任務。 Multi-threading Pool 實現方法一 首先install threadpool,這是個最後更新時間在2015年的套件目前已經沒有人維護了,但使用起來相當簡單和方便,目前python3.7版本使用上沒有問題。 [crayon-638441ebec49a667656 […]

閱讀全文