Python - Processi asincroni

Sommario
Nel momento in cui entriamo nel mondo delle elaborazioni multiple, dei server e delle richieste varie, dobbiamo sapere che ci sono vari tipi di risposte o comportamenti, il sincrono e il asincrono.
Il primo consiste nel servire una richiesta secondo una teoria delle code, fifo, lifo ecc. Cioè, finché il processo non è terminato non passa ad un altro, vedendo questo comportamento, non sarebbe un problema per un programma che gestisce Discussioni poiché potrebbe generarne diversi Discussioni per ogni richiesta che assolva a specifiche funzioni.
Poi abbiamo quello asincrono che ci aiuta a servire con a stesso thread diverse richieste a seconda del loro stato, in modo che se vengono eseguite più richieste mentre una elabora qualcosa, possiamo occuparci della successiva o forse non dovremmo nemmeno aspettare una richiesta per inviare dati al client:

Come vediamo nell'immagine, viene effettuata una simulazione del funzionamento di una chat dove viene rivista fino a quando non c'è un messaggio da trasmettere.
Processi di input e output asincroni
Quando eseguiamo una lettura asincrona delle richieste del client, non è necessario che inizialmente facciamo la lettura completa del messaggio, ma la possiamo vedere poco a poco, grazie alla velocità di elaborazione.
Per lavori asincroni in Pitone Abbiamo due funzioni che possono aiutarci, una è Selezionare e l'altro è sondaggio, di cui quest'ultimo disponibile solo per ambienti UNIX, quindi potrebbe essere una condizione che poniamo un limite se vogliamo realizzare un programma multipiattaforma, tuttavia è la soluzione che scala meglio, quindi dobbiamo tenere conto di questi dettagli.
Il seleziona la funzione prende 3 sequenze come argomenti obbligatori, con un quarto argomento che è facoltativo e contiene il tempo scaduto In secondi, le sequenze sono connessioni che andremo ad aspettare, essendo 3 corrispondono a: input, output, condizioni eccezionali (errori, eccezioni, ecc.).
Se non specifichiamo a tempo scaduto, la funzione Selezionare aspetterà che una delle sequenze sia pronta per l'azione, altrimenti se specifichiamo un timeout, i blocchi aspetteranno il tempo corrispondente. I valori restituiti dalla funzione rappresentano un sottoinsieme attivo di ogni sequenza, ad esempio la prima sequenza restituita sarà una sequenza di input dove avremo qualcosa da leggere.
Vediamo il seguente esempio di codice di come implementare un server usando il seleziona la funzione:
 import socket, select s = socket.socket () host = socket.gethostname () port = 1234 s.bind ((host, port)) s.listen (5) input = [s] mentre True: [b] rs, ws, es = select.select (inputs, [], []) [/ b] for r in rs: se r è s: c, addr = s.accept() print 'Ho ottenuto la connessione da', addr input.append (c) altrimenti: prova: data = r.recv (1024) disconnesso = non dati eccetto socket.error: disconnesso = True se disconnesso: print r.getpeername (), input 'disconnected'.remove (r) else: stampa dati 

Come possiamo vedere, quando chiamiamo il seleziona la funzione passando le 3 sequenze obbligatorie, passiamo la variabile ingressi, che è collegato a ciò che il server acquisisce durante l'ascolto sulla porta TCP 1234, quindi iteriamo per mostrare le informazioni.
Come possiamo vedere, questo aspetto dell'implementazione è abbastanza semplice e il limite sarà dato dalla nostra creatività durante la realizzazione del programma.Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo
wave wave wave wave wave