In diesem Artikel schauen wir uns das Beispiel der Socket-Programmierung an, um zu sehen, wie das Asynchrone Python-Framework funktioniert. Wir müssen die einfache Socket-Programmierung und den von Linux bereitgestellten I/O-Wiederverwendungsmechanismus verstehen. Asynchrones Python-Framework wird auch basierend auf dem E/A-Multiplexmechanismus implementiert, der vom zugrunde liegenden Betriebssystem bereitgestellt wird. Beispielsweise kann select/poll/epoll unter Linux verwendet werden. Schauen wir uns zunächst ein einfaches Beispiel für einen Python-Socket-Server an. Der Python-Code verwendet Python3 und stellt sicher, dass das Selektorenmodul verwendet werden kann.
Eine Instanz
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)
Testen wir es mit einem 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() }
Verwenden Sie go, um es auszuführen, und Sie können die Ausgabe sehen .
Als nächstes verwenden wir die von Python3 bereitgestellten Selectros, um es zu transformieren. Dieses Modul kapselt den E/A-Multiplexmechanismus, der vom zugrunde liegenden Betriebssystem bereitgestellt wird, wie z. B. Epoll unter Linux. Durch den E/A-Multiplexmechanismus können wir die Lese- und Schreibereignisse mehrerer Dateideskriptoren überwachen und Rückruffunktionen registrieren, um eine bessere Parallelitätsleistung zu erzielen. Schauen wir uns zunächst das Beispiel im Dokument „Python3-Selektoren“ an.
Das ist es. Lassen Sie uns den darin geschriebenen TCP-Client weiter ausführen, um ihn zu testen und die Ergebnisse zu sehen.
In späteren Tutorials werden wir die Coroutine von Python anstelle von Callback-Funktionen verwenden, um dieses Beispiel so umzuwandeln, dass wir es mit async/await ausführen können
Das obige ist der detaillierte Inhalt vonWie funktioniert das asynchrone Python-Framework der drei wichtigsten Web-Front-End-Frameworks?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!