環境假設
>= Python 3.5
Linux
優點
- 對異步 IO 任務異常好使
- 編程模型更加簡單,負擔比較小:
- 利用 asyncio 拿到一個 event loop
- 而後往這個 loop 中塞東西(協程)
- 操做系統看到的仍然是單線程,可是從宏觀角度看到的是「多併發」(每一個語言差很少都是這樣:在用戶態上實現一套多線程模型 )
缺點
- 生態不成熟( 雖然有 aio-libs),要是 requests 這樣的庫也有對應的實現就行了(流行度也要高)
- 有一個前提假定:一個 App 必須從前到後都是異步的,這對許多歷史遺留項目是有負擔的
與 gevent + Python 2 對比
- 不少項目都是 Python 2 based,使用 gevent 效果很明顯
- 惟一擔憂的地方是:gevent 會有不少 patch (hack 標準庫),而咱們看到的是一個黑盒子,不免不放心
- gevent 的效率不必定比 asyncio + async def 那一套的效率低哦
(其實我有點粉 gevent,咱們的項目大量使用 gevent,效果還不錯,好用爲啥不用!)編程
怎麼使用
- asyncio 做爲咱們的框架(我比較喜歡標準庫有的東西),async def/await 做爲基本的設計手段
- 多多使用 aio-libs 中的各類 lib (必須從頭至尾都異步啊!)