壞處:無法無限制的開啟多執行緒或者多程序。
執行緒池、程序池:適當使用
使用非同步實現高效能的資料爬取操作(人多力量大)
# 環境安裝:pip install aiohttp
# 使用該模組中的clientsession
)# 2表示同時存在兩個協程
pool = pool(2)
urls =
for i in
range(10
):''
)print
(urls)
# 生成一組請求url,每個都會被阻塞2s
# 使用async新建乙個協程
#text()返回字串形式的響應資料
#read()返回的二進位制形式的響應資料
#json()返回的就是json物件
#注意:獲取響應資料操作之前一定要使用await進行手動掛起
page_text =
await response.text(
)print
(page_text)
tasks =
for url in urls:
c = get_page(url)
task = asyncio.ensure_future(c)
loop = asyncio.get_event_loop(
)loop.run_until_complete(asyncio.wait(tasks)
)end = time.time(
)print
('總耗時:'
,end-start)
乙個執行緒可以多個協程,乙個程序也可以單獨擁有多個協程。
執行緒程序都是同步機制,而協程則是非同步。
協程能保留上一次呼叫時的狀態,每次過程重入時,就相當於進入上一次呼叫的狀態。
執行緒是搶占式,而協程是非搶占式的,所以需要使用者自己釋放使用權來切換到其他協程,因此同一時間其實只有乙個協程擁有執行權,相當於單執行緒的能力。
協程並不是取代執行緒, 而且抽象於執行緒之上, 執行緒是被分割的cpu資源, 協程是組織好的**流程, 協程需要執行緒來承載執行, 執行緒是協程的資源, 但協程不會直接使用執行緒, 協程直接利用的是執行器(interceptor), 執行器可以關聯任意執行緒或執行緒池, 可以使當前執行緒, ui執行緒, 或新建新程.。
執行緒是協程的資源。協程通過interceptor來間接使用執行緒這個資源。
python爬蟲學習(二十)非同步爬蟲 執行緒池
import time 使用單執行緒序列的方式執行 def get page str time.sleep 2 name list xiaozi aa bb cc start time time.time for i in range len name list get page name list...
Python爬蟲 非同步爬蟲(多程序和多執行緒)
非同步爬蟲 在爬蟲中使用非同步實現高效能的資料爬取操作 執行緒是程式執行的最小單位,乙個程序可以有多個執行緒。非同步爬蟲的方式 多程序,多執行緒 不建議 好處 可以為相關阻塞的操作單獨開啟程序或者執行緒,阻塞操作就可以非同步執行 繼續執行阻塞的操作之後的 弊端 無法無限制地開啟多程序或者多執行緒 程...
Python爬蟲 初識爬蟲
模擬瀏覽器開啟網頁,獲取網頁中我們想要的那部分資料 瀏覽器開啟網頁的過程 當你在瀏覽器中輸入位址後,經過dns伺服器找到伺服器主機,向伺服器傳送乙個請求,伺服器經過解析後傳送給使用者瀏覽器結果,包括html,js,css等檔案內容,瀏覽器解析出來最後呈現給使用者在瀏覽器上看到的結果 瀏覽器傳送訊息給...