Python 高階程式設計之 asyncio併發程式設計
阿新 • • 發佈:2018-12-23
Python 高階程式設計之 asyncio併發程式設計
1. asyncio 簡介
1.1 協程與 asyncio
協程編寫的三個組成部分:1. 事件迴圈, 2. 回撥(驅動生成器), 3. epoll(IO 多路複用)
asyncio是python用於解決非同步io程式設計的一整套解決方案。基於 asyncio 的框架有: tornado、gevent、twisted(scrapy, django channels)。
django channels 用於 HTTP 2.0 開發;torando(實現web伺服器), django+flask(uwsgi, gunicorn+nginx);tornado可以直接部署, nginx+tornado
1.2 例子
import asyncio
import time
async def get_html(url):
print("start get url")
# 這裡不能使用 time.sleep(2) 模擬 HTTP 請求,因為這是一個同步阻塞的方式
# 這個地方必須加 await
await asyncio.sleep(2)
print("end get url")
if __name__ == "__main__":
start_time = time.time()
loop = asyncio.get_event_loop( )
tasks = [get_html("http://www.imooc.com") for i in range(10)]
loop.run_until_complete(asyncio.wait(tasks))
print(time.time()-start_time)