針對這個標題,我引用php中文網的Tomorin作者的一篇文章
這篇文章我們從 socket 程式設計的例子來看看 Python 非同步框架是如何工作的,需要了解下簡單的 socket 程式設計以及 Linux 提供的 I/O 複用機制。 Python 非同步框架也是基於作業系統底層提供的 I/O 複用機制來實現的,比如 linux 下可以使用 select/poll/epoll 等。 我們先看個簡單的 python socket server 例子,Python 程式碼使用 Python3,確保可以使用 selectors 模組。
一個例項
我們下邊用一個 golang 的 tcp client 測試下它:
使用 go 執行它可以看到輸出。
接下來我們使用 python3 提供的 selectros 來改造它,這個模組封裝了作業系統底層提供的 I/O 複用機制,比如 linux 上使用了 epoll。透過 I/O 複用機制我們可以監聽多個檔案描述符的可讀寫事件並且註冊回撥函式,擁有更好的併發效能。 先看 python3 的 selectors 文件給的例子
我們來執行下這個 使用了 seelctors I/O 複用機制的 tcp echo server 看下輸出結果。
到這裡就差不多了,我們再繼續執行 go 寫的 tcp client 來測試它看結果。
在後邊教程中我們將使用 python 的 coroutine 而不是回撥函式來改造這個例子,這樣一來我們就能使用 async/await 來執行它了
針對這個標題,我引用php中文網的Tomorin作者的一篇文章
這篇文章我們從 socket 程式設計的例子來看看 Python 非同步框架是如何工作的,需要了解下簡單的 socket 程式設計以及 Linux 提供的 I/O 複用機制。 Python 非同步框架也是基於作業系統底層提供的 I/O 複用機制來實現的,比如 linux 下可以使用 select/poll/epoll 等。 我們先看個簡單的 python socket server 例子,Python 程式碼使用 Python3,確保可以使用 selectors 模組。
一個例項
我們下邊用一個 golang 的 tcp client 測試下它:
使用 go 執行它可以看到輸出。
接下來我們使用 python3 提供的 selectros 來改造它,這個模組封裝了作業系統底層提供的 I/O 複用機制,比如 linux 上使用了 epoll。透過 I/O 複用機制我們可以監聽多個檔案描述符的可讀寫事件並且註冊回撥函式,擁有更好的併發效能。 先看 python3 的 selectors 文件給的例子
我們來執行下這個 使用了 seelctors I/O 複用機制的 tcp echo server 看下輸出結果。
到這裡就差不多了,我們再繼續執行 go 寫的 tcp client 來測試它看結果。
在後邊教程中我們將使用 python 的 coroutine 而不是回撥函式來改造這個例子,這樣一來我們就能使用 async/await 來執行它了