Python 的非同步 IO:Aiohttp Client 程式碼分析

Python 的非同步 IO:Aiohttp Client 程式碼分析
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

Python 的非同步 IO:Aiohttp Client 程式碼分析

Aiohttp 是 Python 的一個 HTTP 框架,基於 asyncio,所以叫 Aiohttp。

我主要是看原始碼,想理解它的設計,所以附上了類圖與時序圖。不可避免的,可讀性會比較差。
想找教程的話,請移步 官方教程,寫得還是挺不錯的。

一個例子

下面這個例子,通過 HTTP GET 列出 GitHub 的 public events

import asyncio
import aiohttp

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get('https://api.github.com/events') as resp:
            print(resp.status)
            print(await resp.text())

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

Response 是一個 JSON 格式的文字:

[
  {
    "id": "6888907432",
    "type": "PushEvent",
    "actor": {
      "id": 3956266,
      "login": "sekineh",
      "display_login": "sekineh",
      "gravatar_id": "",
      "url": "https://api.github.com/users/sekineh",
      "avatar_url": "https://avatars.githubusercontent.com/u/3956266?"
    },
    ...
]

ClientSession

不過肯定是不推薦的,就當是幫助理解吧。

ClientSession.get()

當然,text()

Connector

ClientSession

以及 close()

ConnectionKey

ClientRequest

它是一個 namedtuple

host

全域性函式 request()

Aiohttp 為 Client 程式提供了一個全域性函式 request()

可見 request()

self.response

類圖

時序圖

The End

相關文章

程式語言 最新文章