aiohttp模組實現多工非同步協程實現非同步爬蟲

2021-10-13 22:53:12 字數 1528 閱讀 1571

# 匯入 aiohttp 模組, 使用該模組中的 clientsession 類,例項化乙個物件進行網路請求

urls =

['',''

,'']async

defget_page

(url)

:print

('正在請求:'

,url)

# 例項乙個session物件

# 注意: 使用aiohttp時,用到的**是字串形式,而requests 是字典形式

async

with

await session.get(url)

as response:

# text() 返回字串形式的響應資料

# read() 返回二進位制形式的響應資料

# json() 返回的就是json物件

# 注意:獲取響應資料操作之前一定要使用 await 進行手動掛起

page_text =

await response.text(

)print

('請求完畢:'

,page_text)

tasks =

# 專門存放任務物件

stark_time = time.time(

)for url in urls:

c=get_page(url)

# 函式前面加上 async 就會返回乙個協程物件,此時不會執行函式

task = asyncio.ensure_future(c)

# 生成任務物件

# 將任務物件放進列表中

loop = asyncio.get_event_loop(

)loop.run_until_complete(asyncio.wait(tasks)

)end_time = time.time(

)print

('總耗時:'

,end_time-stark_time)

列印結果:

正在請求: http:

.0.1

:5000

/bobo

正在請求: http:

.0.1

:5000

/haha

正在請求: http:

.0.1

:5000

/guagua

請求完畢: ok,guagua

請求完畢: ok,bobo

請求完畢: ok,haha

總耗時: 3.005218267440796

process finished with exit code 0

aiohttp實現多工非同步協程 簡單例項

text 返回以字串形式的響應資料 read 返回二進位制形式的響應資料 json 返回json物件 注意 響應資料操作前一定要使用await進行手動掛起 page text await responsse.text print page text tasks for url in urls c g...

實現多工

多工介紹 簡單來說就是作業系統可以同時執行過個任務 單核cpu作業系統會讓各個任務交替執行 真正的多工只能在多核cpu上實現,也就是並行和併發2 併發 併發 指的是任務數多於cpu核數,通過作業系統的各種任務排程演算法,實現用多個任務 一起 執行 實際上總有一些任務不在執行,因為切換任務的速度相當快...

Python 多工之協程(3)實現多工

學習理解迭代器和生成器之後,開始使用協程來實現多工 當乙個函式中包含yield關鍵字,那麼這個函式就不再是乙個普通的函式,它的返回值是乙個生成器物件。我們可以使用next 或send 函式來啟動喚醒生成器物件,當程式第一次執行到yield時,程式暫停執行,並返回yield後邊跟的變數,當再次喚醒時,...