Concurrency_Programming

【Python教學】淺談 Concurrency Programming

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

Async異步全站爬蟲_Max行銷誌

【實戰篇】 解析 Python 之父寫的 web crawler 異步爬蟲

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

以下程式碼範例是來自於 Python 之父 Guido van Rossum 和 A. Jesse Jiryu Davis 所一起撰寫的 web crawler ,主要是展示如何使用 asyncio module + aiohttp 來寫網頁異步爬蟲。 Authors: A. Jesse Jiryu Davis and Guido van Rossum Project: Web crawler This is a web crawler. You give it a URL and it will crawl that website by following href links in the HTML pages. The point of the example is to show […]

asyncio_程式範例_Max行銷誌

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

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

關於本篇將會介紹 Async IO 的兩種設計模式: 範例ㄧ. 協程鏈 Chaining Coroutines 範例二. 協程與列隊 Coroutines with Queue 範例ㄧ. 協程鏈 Chaining Coroutines 在上一篇 【Python教學】淺談 Coroutine 協程使用方法 中有提到協程具有 Awaitables 可等待的特性,因此我們可以利用此特性將程序分解為較小的,可管理的,可回收的協程。 如下面 Chaining Coroutines 協程程式範例的例子,我們將任務分成三個協程函數,分別是 step_one、step_two 和 step_three,並在協程函數 asyncio_chain 中調度這三個任務。 當第一個任務做完之後,會將結果傳入第二個任務 […]

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 […]

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 […]