Python - Asynchrone processen

Inhoudsopgave
Tegen de tijd dat we de wereld van meerdere verwerkingen, servers en gevarieerde verzoeken betreden, moeten we weten dat er verschillende soorten reacties of gedragingen zijn, de synchroon en de asynchroon.
De eerste bestaat uit het bedienen van een verzoek volgens een theorie van wachtrijen, fifo, lifo etc. Dat wil zeggen, totdat het proces is voltooid, gaat het niet naar een ander, gezien dit gedrag, zou het geen probleem zijn voor een programma dat Draden omdat het meerdere kan genereren Draden voor elk verzoek dat specifieke functies heeft.
Dan hebben we de asynchrone die ons helpt om te dienen met a dezelfde draad meerdere verzoeken afhankelijk van hun status, zodat als meerdere verzoeken worden uitgevoerd terwijl de ene iets verwerkt, we de volgende kunnen behandelen of misschien moeten we niet eens wachten op een verzoek om gegevens naar de klant te sturen:

Zoals we in de afbeelding zien, wordt een simulatie gemaakt van de werking van een chat waarbij deze wordt beoordeeld totdat er een bericht is om te verzenden.
Asynchrone invoer- en uitvoerprocessen
Wanneer we de verzoeken van de klant asynchroon lezen, is het niet nodig dat we het bericht in eerste instantie volledig lezen, maar we kunnen het beetje bij beetje zien, dankzij de verwerkingssnelheid.
Voor asynchroon werken in Python We hebben twee functies die ons kunnen helpen, één is: selecteer en de andere is opiniepeiling, waarvan de laatste alleen beschikbaar is voor omgevingen UNIX, dus het kan een voorwaarde zijn dat we een limiet stellen als we een multiplatform-programma willen maken, maar het is de oplossing die het beste schaalt, dus we moeten met deze details rekening houden.
De selecteer functie neemt 3 reeksen als vereiste argumenten, met een vierde argument dat optioneel is en de . bevat time-out In seconden zijn de sequenties verbindingen waarop we gaan wachten, zijnde 3 komen ze overeen met het volgende: invoer, uitvoer, uitzonderlijke omstandigheden (fouten, uitzonderingen, enz.).
Als we geen specificeren time-out, de functie selecteer het zal wachten tot een van de sequenties klaar is voor actie, anders als we een time-out specificeren, zullen de blokken wachten op de overeenkomstige tijd. De waarden die door de functie worden geretourneerd, vertegenwoordigen een actieve subset van elke reeks, bijvoorbeeld de eerste geretourneerde reeks is een invoerreeks waar we iets te lezen hebben.
Laten we het volgende codevoorbeeld bekijken van hoe een server te implementeren met behulp van de selecteer functie:
 importeer socket, selecteer s = socket.socket () host = socket.gethostname () poort = 1234 s.bind ((host, poort)) s.listen (5) inputs = [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 inputs.append (c) else: try: data = r.recv (1024) disconnected = geen data behalve socket.error: disconnected = True indien losgekoppeld: print r.getpeername (), 'disconnected' inputs.remove (r) else: print data 

Zoals we kunnen zien, wanneer we de selecteer functie als we de 3 verplichte reeksen passeren, passeren we de variabele ingangen, die is gekoppeld aan wat de server vastlegt tijdens het luisteren op TCP-poort 1234, dan herhalen we om de informatie weer te geven.
Zoals we kunnen zien, is dit aspect van de implementatie vrij eenvoudig en de limiet zal worden gesteld door onze creativiteit bij het maken van het programma.Vond je deze tutorial leuk en hielp je hem?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave