Python - asinkroni procesi

Sadržaj
Dok uđemo u svijet višestruke obrade, poslužitelja i različitih zahtjeva, moramo znati da postoje različite vrste odgovora ili ponašanja, sinkroni i asinkroni.
Prvi se sastoji od posluživanja zahtjeva prema teoriji redova, fifo, lifo itd. Odnosno, sve dok proces ne završi, ne ide na drugo, vidjevši ovo ponašanje, ne bi bio problem za program koji rukuje Niti budući da bi moglo generirati nekoliko Niti za svaki zahtjev koji služi određenim funkcijama.
Zatim imamo asinkronu koja nam pomaže u posluživanju s ista nit nekoliko zahtjeva ovisno o njihovom statusu, tako da ako se nekoliko zahtjeva izvrši dok jedan nešto obrađuje, možemo pristupiti sljedećem ili možda ne bismo trebali ni čekati zahtjev za slanje podataka klijentu:

Kao što vidimo na slici, simulira se rad chata gdje se pregledava sve dok se ne pojavi poruka za prijenos.
Asinkroni ulazni i izlazni procesi
Kada radimo asinkrono čitanje klijentovih zahtjeva, nije nužno da u početku čitamo potpuno čitanje poruke, ali to možemo vidjeti malo po malo, zahvaljujući brzini obrade.
Za asinkroni rad u Piton Imamo dvije funkcije koje nam mogu pomoći, jedna je Izaberi a drugi je anketa, od kojih je potonji dostupan samo za okruženja UNIX, pa bi mogao biti uvjet da stavimo ograničenje ako želimo napraviti višeplatformski program, međutim to je rješenje koje najbolje mjeri pa moramo uzeti u obzir te detalje.
The odaberite funkciju uzima 3 sekvence kao potrebne argumente, uz četvrti argument koji nije obavezan i sadrži pauza U sekundama su sekvence veze na koje ćemo čekati, budući da 3 odgovaraju sljedećim: ulaz, izlaz, iznimni uvjeti (pogreške, iznimke itd.).
Ako ne navedemo a pauza, funkcija Izaberi čekat će dok jedna od sekvenci ne bude spremna za akciju, u protivnom, ako navedemo vremensko ograničenje, blokovi će čekati odgovarajuće vrijeme. Vrijednosti koje funkcija vraća predstavljaju aktivni podskup svakog niza, na primjer prvi vraćeni niz bit će ulazni niz u kojem ćemo imati što čitati.
Pogledajmo sljedeći primjer koda kako implementirati poslužitelj pomoću odaberite funkciju:
 import socket, odaberite s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) inputs = [s] while True: [b] rs, ws, es = select.select (inputs, [], []) [/ b] za r u rs: ako je r s: c, addr = s.accept () ispiši 'Got connection from', addr inputs.append (c) else: try: data = r.recv (1024) disconnected = nisu podaci osim socket.error: disconnected = True ako je isključen: print r.getpeername (), 'disconnected' inputs.remove (r) else: print data 

Kao što vidimo, kada zovemo odaberite funkciju prolazeći 3 obavezna slijeda, prosljeđujemo varijablu ulazi, koji je povezan s onim što poslužitelj snima tijekom slušanja na TCP portu 1234, tada ponavljamo za prikaz informacija.
Kao što vidimo, ovaj aspekt implementacije je prilično jednostavan i granicu će dati naša kreativnost pri izradi programa.Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave