Innholdsfortegnelse
Når vi kommer inn i verden med flere behandlinger, servere og varierte forespørsler, må vi vite at det er forskjellige typer svar eller atferd, synkron og asynkron.Den første består i å betjene en forespørsel i henhold til en teori om køer, fifo, lifo etc. Det vil si at før prosessen er ferdig, går den ikke til en annen, ser denne oppførselen, ville det ikke være et problem for et program som håndterer Tråder siden det kan generere flere Tråder for hver forespørsel som tjener spesifikke funksjoner.
Så har vi den asynkrone som hjelper oss å tjene med en samme tråd flere forespørsler avhengig av statusen deres, slik at hvis flere forespørsler blir utført mens en behandler noe, kan vi gå til den neste, eller kanskje vi ikke engang skal vente på en forespørsel om å sende data til klienten:
Som vi ser på bildet, blir det gjort en simulering av driften av en chat der den blir gjennomgått til det er en melding å sende.
Asynkrone inngangs- og utgangsprosesser
Når vi gjør en asynkron lesing av klientens forespørsler, er det ikke nødvendig at vi leser hele meldingen i utgangspunktet, men vi kan se det litt etter litt, takket være behandlingshastigheten.
For asynkront arbeid i Python Vi har to funksjoner som kan hjelpe oss, den ene er å velge og den andre er avstemming, hvorav sistnevnte bare er tilgjengelig for miljøer UNIX, så det kan være en betingelse at vi setter en grense hvis vi ønsker å lage et multiplattform -program, men det er løsningen som best skalerer, så vi må ta hensyn til disse detaljene.
De velg funksjon tar 3 sekvenser som nødvendige argumenter, med et fjerde argument som er valgfritt og inneholder pause På sekunder er sekvensene tilkoblinger som vi skal vente på, idet de tilsvarer 3: input, output, eksepsjonelle forhold (feil, unntak, osv.).
Hvis vi ikke spesifiserer a pause, funksjonen å velge det vil vente til en av sekvensene er klar for handling, ellers hvis vi angir en timeout, venter blokkene på den tilsvarende tiden. Verdiene som returneres av funksjonen representerer et aktivt delsett av hver sekvens, for eksempel vil den første sekvensen som returneres være en inngangssekvens der vi vil ha noe å lese.
La oss se følgende kodeeksempel på hvordan du implementerer en server ved hjelp av velg funksjon:
import socket, velg s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) innganger = [s] mens 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) annet: prøv: data = r.recv (1024) frakoblet = ikke data bortsett fra socket.error: frakoblet = Sant hvis frakoblet: skriv ut r.getpeername (), 'frakoblet' innganger. fjern (r) annet: skriv ut data
Som vi kan se, når vi kaller velg funksjon passerer de 3 obligatoriske sekvensene, passerer vi variabelen innganger, som er koblet til det serveren fanger mens du lytter på TCP -port 1234, så gjentar vi for å vise informasjonen.
Som vi kan se, er dette aspektet av implementeringen ganske enkelt, og grensen vil bli gitt av vår kreativitet når vi lager programmet.Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng