通常在進行網路資料採集時候我們會用到requests,urllib等模組,但是這些模組在使用中並不支援非同步,所以今天我們介紹乙個支援非同步網路請求的模組aiohttp.
首先我們使用flask簡單的搭乙個伺服器:
from flask import flask下面是通過aiohttp進行的非同步訪問 :def xiaohua():
return 'i am xiaohua'
def xiaohuang():
return 'i am xiaohuang'
def xiaoming():
return 'i am xiaoming'
if __name__ == '__main__':
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 xiaomingview codei 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
從結果可以看出,通過使用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位址,該位址會被解析...