Concurrency_Programming

【Python教學】淺談 Concurrency Programming

發表於 留下留言分類為《04 Python 基礎教學, 05 Python 爬蟲教學, 10 所有文章

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

asyncio_程式範例_Max行銷誌

【Python教學】Async IO Design Patterns 範例程式

發表於 留下留言分類為《05 Python 爬蟲教學, 10 所有文章

關於本篇將會介紹 Async IO 的兩種設計模式: 範例ㄧ. 協程鏈 Chaining Coroutines 範例二. 協程與列隊 Coroutines with Queue 範例ㄧ. 協程鏈 Chaining Coroutines 在上一篇 【Python教學】淺談 Coroutine 協程使用方法 中有提到協程具有 Awaitables 可等待的特性,因此我們可以利用此特性將程序分解為較小的 […]

python_coroutine_協程

【Python教學】淺談 Coroutine 協程使用方法

發表於 留下留言分類為《04 Python 基礎教學, 05 Python 爬蟲教學, 10 所有文章

本篇大綱: 什麼是 Coroutine (協程 / 微線程)? 使用 Python asyncio library 寫 Coroutine 一個簡單的範例 了解 async / await 語法糖 如何建立事件循環? 如何建立任務 Task? 如何同時運行多個 Tasks 任務? 一. 什麼是 Coroutine (協程 / 微線程)? 先來看看 Python官方對 Coroutine 的解釋: […]

mutli_processing_pool

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

發表於 留下留言分類為《04 Python 基礎教學, 05 Python 爬蟲教學, 10 所有文章

本篇大綱: 簡單的 multi-processing pool 範例 建議使用處理程序 (process) 數量 了解 pool 能調用的方法(method) 到底有用 _async 是差在哪裡? map 和 starmap 到底差在哪裡? Callback? 取得回傳資料 補充 chunksize & maxtasksperchild 是什麼? 一. 簡單的 Multi-proces […]

python_threading_processing

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

發表於 留下留言分類為《05 Python 爬蟲教學, 10 所有文章

一. Multi-processing 和Multi-threading 的優缺點: Multi-processing (多處理程序/多進程): 資料在彼此間傳遞變得更加複雜及花時間,因為一個 process 在作業系統的管理下是無法去存取別的 process 的 memory 適合需要 CPU 密集,像是迴圈計算 Multi-threading (多執行緒/多線程): 資料彼此傳遞簡單,因為多執 […]

python_gil_thread-saf_atomic

【Python教學】淺談 GIL & Thread-safe & Atomic operation

發表於 留下留言分類為《04 Python 基礎教學, 05 Python 爬蟲教學, 10 所有文章

本篇整理了關於 Python 為什麼會有 GIL 的出現、thread-safe 問題探討、以及 GIL 切換時機、和確保 thread-safe 的原子操作概念 (atomic operation),此篇未來會持續更新,希望對在了解 GIL 的你有幫助~ 一. 為什麼會有 GIL 的出現? In CPython, the global interpreter lock, or GIL, is a […]

python_selenium_driver

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

發表於 2 則留言分類為《05 Python 爬蟲教學, 10 所有文章

本篇主要紀錄使用 Selenium 搭配 Multi-threading Pool (多執行緒池/多線程池) 遇到 web driver 會重複開啟和關閉的問題,導致效率大幅下降,解決方法是使用 threading.local 將 driver 變數存 local 來判斷是否有需要重複開啟 使用 threading.local() 利用 threading.local() 的方法將 driver […]

multithreadpool

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

發表於 留下留言分類為《05 Python 爬蟲教學, 10 所有文章

先來看一下執行 Multi-threading Pool (多執行緒池/多線程池) 後,可以將每一個頁面原本需要等待 15 s 才能載入完畢並爬取的頁面,降至 3.9 秒 (10 threading pool) ~ 2.28 秒(25 threading pool),但是多線程池的使用要非常留意 tread-safe 問題 ,不小心就會像上面圖片一樣,想像中大家是各自完成任務,但實際上是 […]

python_selenium_error

【爬蟲筆記】Python Selenium Webdriver異常問題集

發表於 1 則留言分類為《05 Python 爬蟲教學, 10 所有文章

在開發 Python Selenium 爬蟲遇到了不少坑,花了很多時間找問題和解決方法,所以記錄一下,希望遇到相同問題的人有幫助 Python Selenium Webdriver 異常記錄 發生 selenium.common.exceptions.TimeoutException 問題: 可以在 driver 這邊設定 timeout 超時時間 driver.set_page_load_tim […]