Python - asynkrona processer

Innehållsförteckning
När vi kommer in i världen av flera behandlingar, servrar och olika förfrågningar måste vi veta att det finns olika typer av svar eller beteenden, synkron och den asynkron.
Den första består av att betjäna en förfrågan enligt en teori om köer, fifo, lifo etc. Det vill säga, tills processen är klar går den inte till en annan, ser detta beteende, det skulle inte vara ett problem för ett program som hanterar Trådar eftersom det kan generera flera Trådar för varje förfrågan som tjänar specifika funktioner.
Sedan har vi den asynkrona som hjälper oss att tjäna med en samma tråd flera förfrågningar beroende på deras status, så att om flera förfrågningar körs medan en bearbetar något, kan vi ta hand om nästa eller kanske vi inte ens ska vänta på en begäran om att skicka data till klienten:

Som vi ser på bilden görs en simulering av hur en chatt fungerar där den granskas tills det finns ett meddelande att överföra.
Asynkrona in- och utmatningsprocesser
När vi gör en asynkron läsning av klientens förfrågningar är det inte nödvändigt att vi läser hela meddelandet inledningsvis, men vi kan se det lite efter lite, tack vare bearbetningshastigheten.
För asynkront arbete i Pytonorm Vi har två funktioner som kan hjälpa oss, en är Välj och den andra är opinionsundersökning, varav den senare endast är tillgänglig för miljöer UNIX, så det kan vara ett villkor att vi sätter en gräns om vi vill göra ett multiplattformsprogram, men det är lösningen som bäst skalar, så vi måste ta hänsyn till dessa detaljer.
De välj funktion tar 3 sekvenser som erforderliga argument, med ett fjärde argument som är valfritt och innehåller Paus På några sekunder är sekvenserna anslutningar som vi ska vänta på, varav 3 de motsvarar följande: input, output, exceptionella förhållanden (fel, undantag, etc).
Om vi ​​inte anger a Paus, funktionen Välj det väntar tills en av sekvenserna är redo för handling, annars om vi anger en timeout väntar blocken på motsvarande tid. De värden som returneras av funktionen representerar en aktiv delmängd av varje sekvens, till exempel kommer den första sekvensen som returneras att vara en ingångssekvens där vi kommer att ha något att läsa.
Låt oss se följande kodexempel på hur man implementerar en server med välj funktion:
 importuttag, välj s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) input = [s] medan True: [b] rs, ws, es = select.select (ingångar, [], []) [/ b] för r i rs: om r är s: c, addr = s.accept () skriv ut 'Fick anslutning från', addr input.append (c) else: try: data = r.recv (1024) disconnected = not data utom socket.error: disconnected = True if disconnected: print r.getpeername (), 'disconnected' input.remove (r) else: print data 

Som vi kan se, när vi ringer till välj funktion passerar de tre obligatoriska sekvenserna, passerar vi variabeln ingångar, som är länkad till vad servern fångar när han lyssnar på TCP -port 1234, så itererar vi för att visa informationen.
Som vi kan se är denna aspekt av implementeringen ganska enkel och gränsen kommer att ges av vår kreativitet när vi gör programmet.Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng
wave wave wave wave wave