1. 程式人生 > >Python 高階程式設計之 asyncio併發程式設計

Python 高階程式設計之 asyncio併發程式設計

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)