python3提供了協程專用的關鍵字async await
, 還提供了asyncio
庫, 來進行異步非阻塞的io操做
沒有老師檢查我也不知道本身算不算徹底懂了, 就不作無用功嘗試說得通俗易懂了.
想要從原理開始理解的話, 推薦tornado的文檔html
asyncio
來代替傳統線程進行io操做?並行訪問某網頁十次python
import asyncio import requests loop = asyncio.get_event_loop() async def t(): get = lambda:requests.get('http://baidu.com') temp = await loop.run_in_executor(None, get) print(temp) loop.run_until_complete(asyncio.gather(*[t() for i in range(10)]))
上面這幾行代碼就能夠完成這些操做了.api
loop = asyncio.get_event_loop()
協程自己並不具有並行能力, 可是有了這個事件loop就能夠進行並行io請求併發
get = lambda:requests.get('http://baidu.com') temp = await loop.run_in_executor(None, get)
通常函數是沒法被await修飾的, 必須用api封裝一下(感受很像threading), 我之因此再封裝一次get, 是由於run_in_executor
傳參數比較坑, 不支持**kwargs
異步
loop.run_until_complete(asyncio.gather(*[t() for i in range(10)]))
async
run_until_complete
這個api是指運行內容物直到結束(api如其名), gather
是把任務組合到一塊兒, 若是*
的部分有迷惑的話, 你寫asycio.gather(t(),t(), t()...)
也是能夠的.ide
おわり.函數