python_coroutine_協程

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

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

本篇大綱: 什麼是 Coroutine (協程 / 微線程)? 使用 Python asyncio library 寫 Coroutine 一個簡單的範例 了解 async / await 語法糖 如何建立事件循環? 如何建立任務 Task? 如何同時運行多個 Tasks 任務? 一. 什麼是 Coroutine (協程 / 微線程)? 先來看看 Python官方對 Coroutine 的解釋: Coroutines are a more generalized form of subroutines. Subroutines are entered at one point and exited at another point. Coroutines can be entered, ex […]

python_bigquery操作

【Python教學】Python 使用 BigQuery 的操作與安裝

發佈於 發佈留言分類: 06 Python 資料庫教學10 所有文章

本篇大綱: 如何安裝串接 BigQuery 套件 如何設定 BigQuery 金鑰 & import 套件 了解 BigQuery 架構 建立 GCP Projects (專案) 建立 BigQuery Datasets (資料集) 建立 BigQuery Tables (資料表) 關於 BigQuery 價格 關於 BigQuery 其他延伸閱讀 ㄧ. 如何安裝串接 BigQuery 套件? 在 console 終端機輸入指令: 套件說明: google-cloud-bigquery:是 Google Cloud Client Libraries 的 Python 程式庫 pyarrow:是將 pandas DataFrame 轉換成 BigQuery Table 的套件 參考文件 […]

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 使用方法

發佈於 4 則留言分類: 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 […]

python_gil_thread-saf_atomic

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

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

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