Inhaltsverzeichnis
Wenn wir in die Welt der Mehrfachverarbeitung, Server und unterschiedlichen Anfragen eintreten, müssen wir wissen, dass es verschiedene Arten von Antworten oder Verhaltensweisen gibt, die synchron und das asynchron.Die erste besteht darin, eine Anfrage nach einer Theorie von Warteschlangen, Fifo, Lifo usw. Das heißt, bis der Prozess abgeschlossen ist, geht er nicht zu einem anderen. Wenn Sie dieses Verhalten sehen, wäre dies kein Problem für ein Programm, das mit Themen da es mehrere erzeugen könnte Themen für jede Anfrage, die bestimmten Funktionen dient.
Dann haben wir die asynchrone, die uns hilft, mit a zu dienen gleiches Thema mehrere Requests je nach Status, so dass wir bei mehreren ausgeführten Requests, während einer etwas abarbeitet, wir uns um den nächsten kümmern können oder vielleicht gar nicht erst auf einen Request warten sollten, um Daten an den Client zu senden:
Wie wir im Bild sehen, wird eine Simulation des Ablaufs eines Chats durchgeführt, bei der überprüft wird, bis eine Nachricht zu übertragen ist.
Asynchrone Eingabe- und Ausgabeprozesse
Wenn wir die Anfragen des Clients asynchron lesen, müssen wir die Nachricht zunächst nicht vollständig lesen, aber wir können sie dank der Verarbeitungsgeschwindigkeit nach und nach sehen.
Für asynchrones Arbeiten in Python Wir haben zwei Funktionen, die uns helfen können, eine ist auswählen und das andere ist Umfrage, von denen letzteres nur für Umgebungen verfügbar ist UNIX, daher könnte es eine Bedingung sein, dass wir ein Limit setzen, wenn wir ein Multiplattform-Programm erstellen wollen, aber es ist die Lösung, die am besten skaliert, also müssen wir diese Details berücksichtigen.
Das Funktion auswählen nimmt 3 Sequenzen als erforderliche Argumente, mit einem vierten Argument, das optional ist und das . enthält Auszeit In Sekunden sind die Sequenzen Verbindungen, auf die wir warten werden, da sie 3 sind, entsprechen sie den folgenden: Eingabe, Ausgabe, Ausnahmebedingungen (Fehler, Ausnahmen usw.).
Wenn wir kein a . angeben Auszeit, die Funktion auswählen es wird gewartet, bis eine der Sequenzen einsatzbereit ist, andernfalls warten die Blöcke, wenn wir ein Timeout angeben, auf die entsprechende Zeit. Die von der Funktion zurückgegebenen Werte stellen eine aktive Teilmenge jeder Sequenz dar. Beispielsweise ist die erste zurückgegebene Sequenz eine Eingabesequenz, in der wir etwas zu lesen haben.
Sehen wir uns das folgende Codebeispiel an, wie Sie einen Server mit dem implementieren Funktion auswählen:
import socket, select s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) input = [s] while True: [b] rs, ws, es = select.select (inputs, [], []) [/ b] for r in rs: if r is s: c, addr = s.accept () print 'Got connection from', addr input.append (c) else: try: data = r.recv (1024) Disconnected = keine Daten außer socket.error: Disconnected = True wenn getrennt: print r.getpeername (), 'disconnected' input.remove (r) else: print data
Wie wir sehen können, wenn wir die Funktion auswählen Übergeben Sie die 3 obligatorischen Sequenzen, übergeben wir die Variable Eingänge, die mit dem verknüpft ist, was der Server beim Abhören des TCP-Ports 1234 erfasst, dann iterieren wir, um die Informationen anzuzeigen.
Wie wir sehen, ist dieser Aspekt der Implementierung recht einfach und die Grenze wird durch unsere Kreativität bei der Erstellung des Programms gesetzt.Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben