aiohttp 支援非同步的網路請求模組

2022-06-23 23:45:14 字數 1520 閱讀 3422

通常在進行網路資料採集時候我們會用到requests,urllib等模組,但是這些模組在使用中並不支援非同步,所以今天我們介紹乙個支援非同步網路請求的模組aiohttp.

首先我們使用flask簡單的搭乙個伺服器:

from flask import flask

def xiaohua():

return 'i am xiaohua'

def xiaohuang():

return 'i am xiaohuang'

def xiaoming():

return 'i am xiaoming'

if __name__ == '__main__':

下面是通過aiohttp進行的非同步訪問 :

async def get_page(url): #加async關鍵字,使函式返回乙個協程物件

async with aiohttp.clientsession() as session: #建立clientsession物件

async with await session.get(url=url) as response: #將url傳入get方法並賦值到response

page_text = await response.text() #遇io手動掛起

print(page_text)

start = time.time()

urls = [

'','',

'ng',

'','',

'ng',

'','',

'ng',

]tasks =

loop = asyncio.get_event_loop() #建立事件迴圈

for url in urls:

c = get_page(url) #接收協程物件

task = asyncio.ensure_future(c) #對協程物件進一步封裝成future

loop.run_until_complete(asyncio.wait(tasks)) #將多個任務物件對應的列表註冊到事件迴圈中,需使用asyncio.wait進行逐一取值

print('總耗時:',time.time()-start)

結果 :

i am xiaoming

i am xiaoming

i am xiaohuang

i am xiaoming

i am xiaohua

i am xiaohuang

i am xiaohuang

i am xiaohua

i am xiaohua

總耗時: 0.018949031829833984

view code

從結果可以看出,通過使用aiohttp模組,訪問實現了非同步訪問,大大提高了效率.

非同步網路程式設計aiohttp的使用

aiohttp的使用 安裝 pip install asyncio因為有的 請求的時候會驗證ssl證書,如果是自簽名的ssl證書會出錯。conn aiohttp.tcpconnector verify ssl false 防止ssl報錯class aiohttp.tcpconnector ssl n...

支援非同步通知的globalfifo驅動

驅動程式執行在核心空間中,應用程式執行在使用者空間中,兩者是不能直接通訊的。但在實際應用中,在裝置已經準備好的時候,我們希望通知使用者程式裝置已經ok,使用者程式可以讀取了,這樣應用程式就不需要一直查詢該裝置的狀態,從而節約了資源,這就是非同步通知。好,那下乙個問題就來了,這個過程如何實現呢?簡單,...

怎麼使用AJAX的GET和POST非同步請求

1.建立xmlhttprequest物件 確認xmlhttprequest物件建立成功 2.註冊 函式 3.初始化xmlhttprequest物件,設定連線資訊 第乙個引數表示http的請求方式,分為get和post兩種,get方式請求的引數在url中 第二個引數表示請求的url位址,該位址會被解析...