Python - asynkrone processer

Indholdsfortegnelse
Når vi kommer ind i verden med flere behandlinger, servere og forskellige forespørgsler, skal vi vide, at der er forskellige typer svar eller adfærd, synkron og asynkron.
Den første består i at betjene en anmodning ifølge en teori om køer, fifo, lifo osv. Det vil sige, indtil processen er færdig, går den ikke til en anden, ser denne adfærd, ville det ikke være et problem for et program, der håndterer Tråde da det kunne generere flere Tråde for hver anmodning, der tjener specifikke funktioner.
Så har vi den asynkrone, der hjælper os med at tjene med en samme tråd flere anmodninger afhængigt af deres status, så hvis flere anmodninger udføres, mens man behandler noget, kan vi tage fat på den næste, eller måske skal vi ikke engang vente på en anmodning om at sende data til klienten:

Som vi ser på billedet, foretages en simulering af driften af ​​en chat, hvor den gennemgås, indtil der er en besked, der skal transmitteres.
Asynkrone input- og outputprocesser
Når vi foretager en asynkron aflæsning af klientens anmodninger, er det ikke nødvendigt, at vi foretager den fulde læsning af meddelelsen i første omgang, men vi kan se det lidt efter lidt, takket være behandlingshastigheden.
Til asynkront arbejde i Python Vi har to funktioner, der kan hjælpe os, den ene er Vælg og den anden er afstemning, hvoraf sidstnævnte kun er tilgængelig for miljøer UNIX, så det kan være en betingelse, at vi sætter en grænse, hvis vi vil lave et multiplatform -program, men det er den løsning, der bedst skalerer, så vi skal tage disse detaljer i betragtning.
Det vælg funktion tager 3 sekvenser som nødvendige argumenter, med et fjerde argument, der er valgfrit og indeholder tiden er gået På få sekunder er sekvenserne forbindelser, som vi skal vente på, idet de svarer til 3: input, output, usædvanlige forhold (fejl, undtagelser osv.).
Hvis vi ikke angiver a tiden er gået, funktionen Vælg det vil vente, indtil en af ​​sekvenserne er klar til handling, ellers hvis vi angiver en timeout, venter blokkene i den tilsvarende tid. De værdier, der returneres af funktionen, repræsenterer et aktivt undersæt af hver sekvens, for eksempel vil den første sekvens, der returneres, være en indgangssekvens, hvor vi har noget at læse.
Lad os se følgende kodeeksempel på, hvordan du implementerer en server ved hjælp af vælg funktion:
 import socket, vælg s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) input = [s] mens True: [b] rs, ws, es = select.select (input, [], []) [/ b] for r in rs: hvis r er s: c, addr = s.accept () print 'Got connection from', addr input.append (c) else: prøv: data = r.recv (1024) disconnected = ikke data undtagen socket.error: disconnected = True if disconnected: print r.getpeername (), 'disconnected' input.remove (r) else: print data 

Som vi kan se, når vi kalder vælg funktion passerer de 3 obligatoriske sekvenser, passerer vi variablen input, som er knyttet til, hvad serveren fanger, mens han lytter på TCP -port 1234, så gentages vi for at vise oplysningerne.
Som vi kan se, er dette aspekt af implementeringen ganske enkelt, og grænsen vil blive givet af vores kreativitet, når vi laver programmet.Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave