參考文章
asyncio庫是python3.4後引入的標準庫,其中直接內置了對異步IO的支持,asyncio的編程模型就是一個消息循環,咱們直接從asyncio中獲取一個eventloop,而後把須要運行的協程扔到eventloop這個消息循環中,就實現了異步操做,下面是使用asyncio異步實現helloworld的過程(這是在async/await 語法糖沒出來以前的寫法,可能看起來有點複雜)python
import asyncio # 使用裝飾器 將一個生成器變成協程 @asyncio.coroutine def hello(): print("hello world") # 這裏的asyncio.sleep()就是在模擬IO操做 r = yield from asyncio.sleep(1) print("hello again") if __name__ == "__main__": #獲取事件循環 loop = asyncio.get_event_loop() #執行異步操做 loop.run_until_complete(hello()) #關閉事件池 loop.close()
上面一段代碼其實並無進行異步操做,可是能夠進行,咱們向事件池中推入兩個hello()封裝的tasks列表,就是在進行異步操做了,web
import asyncio @asyncio.coroutine def hello(): print("hello world") r = yield from asyncio.sleep(1) print("hello again") loop = asyncio.get_event_loop() tasks = [hello(), hello()] loop.run_until_complete(asyncio.wait(tasks)) loop.close()
這是執行結果
很明顯,第二個hello函數沒有等第一個函數返回hello again就開始返回hello world這說明咱們的異步操做成功了編程
可是能夠看到,上述關於封裝成協程類的操做有一些複雜,在python3.5中引入了async/await這一語法糖,因而咱們的代碼能夠簡化爲異步
import asyncio async def hello(): print("hello world") r = await asyncio.sleep(1) print("hello again") loop = asyncio.get_event_loop() tasks = [hello(), hello()] loop.run_until_complete(asyncio.wait(tasks)) loop.close()