日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python的前端框架_web前端三大主流框架之Python异步框架如何工作?

發布時間:2024/10/6 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的前端框架_web前端三大主流框架之Python异步框架如何工作? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章我們從 socket 編程的例子來看看 Python 異步框架是如何工作的,需要了解下簡單的 socket 編程以及 Linux 提供的 I/O 復用機制。 Python 異步框架也是基于操作系統底層提供的 I/O 復用機制來實現的,比如 linux 下可以使用 select/poll/epoll 等。 我們先看個簡單的 python socket server 例子,Python 代碼使用 Python3,確保可以使用 selectors 模塊。

一個實例import socket

HOST = 'localhost' # The remote host

PORT = 8888 # Arbitrary non-privileged port

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

s.bind((HOST, PORT))

s.listen(50)

while True:

conn, addr = s.accept()

print('Connected by', addr)

with conn:

while 1:

data = conn.recv(1024)

if not data:

break

conn.sendall(data)

我們下邊用一個 golang 的 tcp client 測試下它:package main

import (

"fmt"

"net"

"os"

"sync"

)

func sendMessage(msg string) error {

conn, err := net.Dial("tcp", "localhost:8888")

if err != nil {

return fmt.Errorf("error: %v", err)

}

defer conn.Close()

_, err = conn.Write([]byte("hello"))

if err != nil {

return fmt.Errorf("error: %v", err)

}

reply := make([]byte, 1024)

_, err = conn.Read(reply)

if err != nil {

println("Write to server failed:", err.Error())

os.Exit(1)

}

println("reply from server=", string(reply))

return nil

}

func main() {

var wg sync.WaitGroup

nbGoroutines := 20

wg.Add(nbGoroutines)

for k := 0; k < nbGoroutines; k++ {

go func() {

err := sendMessage("hello")

if err != nil {

fmt.Printf("fail: %v\n", err)

}

wg.Done()

}()

}

wg.Wait()

}

使用 go 運行它可以看到輸出。

接下來我們使用 python3 提供的 selectros 來改造它,這個模塊封裝了操作系統底層提供的 I/O 復用機制,比如 linux 上使用了 epoll。通過 I/O 復用機制我們可以監聽多個文件描述符的可讀寫事件并且注冊回調函數,擁有更好的并發性能。 先看 python3 的 selectors 文檔給的例子import selectors

import socket

sel = selectors.DefaultSelector()

def accept(sock, mask):

conn, addr = sock.accept() # Should be ready

print('accepted', conn, 'from', addr)

conn.setblocking(False)

sel.register(conn, selectors.EVENT_READ, read)

def read(conn, mask):

data = conn.recv(1000) # Should be ready

if data:

print('echoing', repr(data), 'to', conn)

conn.send(data) # Hope it won't block

else:

print('closing', conn)

sel.unregister(conn)

conn.close()

sock = socket.socket()

sock.bind(('localhost', 1234))

sock.listen(100)

sock.setblocking(False)

sel.register(sock, selectors.EVENT_READ, accept)

while True: # 這其實就是通常在異步框架中所說的 event loop 啦

events = sel.select()

for key, mask in events:

callback = key.data

callback(key.fileobj, mask)

我們來運行下這個 使用了 seelctors I/O 復用機制的 tcp echo server 看下輸出結果。

到這里就差不多了,我們再繼續運行 go 寫的 tcp client 來測試它看結果。

在后邊教程中我們將使用 python 的 coroutine 而不是回調函數來改造這個例子,這樣一來我們就能使用 async/await 來運行它了

以上就是web前端三大主流框架之Python異步框架如何工作?的詳細內容,更多請關注php中文網其它相關文章!

本文原創發布php中文網,轉載請注明出處,感謝您的尊重!

總結

以上是生活随笔為你收集整理的python的前端框架_web前端三大主流框架之Python异步框架如何工作?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。