Python Asyncio Tutorial

Python Asyncio Tutorial
La biblioteca Asyncio è introdotta in Python 3.4 per eseguire programmi simultanei a thread singolo. Questa biblioteca è popolare rispetto ad altre biblioteche e framework per la sua velocità impressionante e vari uso. Questa libreria viene utilizzata in Python per creare, eseguire e strutturare coroutine e gestire più attività contemporaneamente senza svolgere le attività in parallelo. Le parti principali di questa libreria sono definite di seguito:

Coroutine: La parte del codice che può essere messa in pausa e ripresa in script multi-thread è chiamata coroutine. Coroutines Work cooperativamente in un programma multi-thread. Quando una coroutine fa una pausa, è possibile eseguire altre coroutine.

Loop Event: Viene utilizzato per avviare l'esecuzione delle coroutine e gestire le operazioni di input/output. Ci vogliono più attività e completali.

Compito: L'esecuzione e il risultato delle coroutine sono definiti dalle attività. È possibile assegnare un numero multiplo di attività utilizzando la libreria Asyncio ed eseguire le attività in modo asincrono.

Futuro: Agisce come un deposito futuro in cui il risultato delle coroutine archiverà dopo il completamento. Ciò è utile quando una coroutine richiede di attendere il risultato di altre coroutine.

Come è possibile implementare i concetti di cui sopra della libreria Asyncio è mostrato in questo tutorial utilizzando alcuni esempi semplici.

Esempio-1: creare coroutine singola con un'unica attività

Crea un file denominato Async1.Py e aggiungi il seguente codice. La libreria Asyncio viene importata per utilizzare le funzioni di questa libreria. aggiungere La funzione è dichiarata per calcolare la somma di un particolare intervallo di numeri. Il numero di numeri da 1 a 101 è assegnato dall'attività con un secondo ritardo. Il ciclo di eventi è dichiarato che eseguirà fino a completare tutte le attività del metodo principale. Dopo aver calcolato il valore, la funzione aspetterà un secondo e stamperà il risultato.

Importa asyncio
Async def aggiungi (avvio, fine, attesa):
#Initialis Sum variabile
somma = 0
#Calcula la somma di tutti i numeri
per n nell'intervallo (inizio, fine):
somma += n
#Wait per secondi assegnati
Aspetta Asyncio.sonno (aspetta)
#Print il risultato
print (f'sum da start a end è sum ')
Async def main ():
#Assign di un'unica attività
task = loop.create_task (Aggiungi (1,101,1))
#Run il compito in modo asincrono
Aspetta Asyncio.wait ([attività])
Se __Name__ == '__main__':
#Declare Event Loop
Loop = asyncio.get_event_loop ()
#Run il codice fino al completamento di tutte le attività
ciclo continuo.run_until_complete (main ())
#Close il ciclo
ciclo continuo.vicino()

Produzione:

$ python3 async1.Py

L'output mostra la somma da 1 a 101 che è 5050.

Esempio-2: crea più coroutine

L'uso della libreria Asyncio verrà cancellato quando eseguirai più coroutine contemporaneamente. Crea un nuovo file denominato Async2.Py e aggiungi il seguente codice. Tre compiti vengono generati con tre diverse gamme e valori di attesa in principale() metodo. La prima attività calcolerà la somma da 5 a 500000 in attesa di 3 secondi, la seconda attività calcolerà la somma da 2 a 300000 in attesa di 2 secondi e la terza attività calcolerà la somma da 10 a 1000 in attesa di 1 secondo. L'attività con valori di attesa bassi si completerà all'inizio e l'attività con un valore di attesa elevato verrà finalmente completata.

Importa asyncio
Async def aggiungi (avvio, fine, attesa):
#Initialis Sum variabile
somma = 0
#Calcula la somma di tutti i numeri
per n nell'intervallo (inizio, fine):
somma += n
#Wait per secondi assegnati
Aspetta Asyncio.sonno (aspetta)
#Print il risultato
print (f'sum da start a end è sum ')
Async def main ():
#Assign First Task
task1 = loop.create_task (Aggiungi (5.500000,3))
#Assign Second Task
task2 = loop.Create_Task (Aggiungi (2.300000,2))
#Assign Third Task
task3 = loop.create_task (Aggiungi (10,1000,1))
#Run i compiti in modo asincrono
Aspetta Asyncio.wait ([task1, task2, task3])
Se __Name__ == '__main__':
#Declare Event Loop
Loop = asyncio.get_event_loop ()
#Run il codice fino al completamento di tutte le attività
ciclo continuo.run_until_complete (main ())
#Close il ciclo
ciclo continuo.vicino()

Produzione:

$ python3 async1.Py

L'output mostra che Task3 è completato per primo perché il tempo di attesa di questa attività era solo di 1 secondo e Task1 è completato per ultimo perché il tempo di attesa di questa attività era di 3 secondi.

Esempio-3: coroutine con futuro

Questo esempio mostra l'uso del futuro oggetto della libreria Asyncio. Crea un nuovo file denominato Async3.Py e aggiungi il seguente codice. In questo esempio sono assegnati due compiti. show_message La funzione viene dichiarata qui per stampare il messaggio prima di eseguire la coroutine e dopo aver completato l'esecuzione. La prima attività aspetterà 2 secondi e completerà ultimo. Il secondo compito aspetterà 1 secondi e completerà prima.

Importa asyncio
Async def show_message (numero, attesa):
#Print il messaggio
print (f'ask numero è in esecuzione ')
#Wait per secondi assegnati
Aspetta Asyncio.sonno (aspetta)
print (f'ask numero è completato ')
Async def stop_after (quando):
Aspetta Asyncio.sonno (quando)
ciclo continuo.fermare()
Async def main ():
#Assign First Task
task1 = asyncio.assicurarsi_future (show_message (1,2))
Stampa ('Schedule 1')
#Assign Second Task
task2 = asyncio.assicurarsi_future (show_message (2,1))
Stampa ('Schedule 2')
#Run i compiti in modo asincrono
Aspetta Asyncio.wait ([task1, task2])
Se __Name__ == '__main__':
#Declare Event Loop
Loop = asyncio.get_event_loop ()
#Run il codice del metodo principale fino al completamento di tutte le attività
ciclo continuo.run_until_complete (main ())

Produzione:

$ Python3 Async3.Py

Viene mostrato nell'output che il task1 viene avviato per primo e completato per ultimo e Task2 viene avviato in seguito ma completato per primo per il breve tempo di attesa.

Conclusione

Il concetto di base della programmazione asincrona che utilizza la libreria Asyncio di Python è spiegato qui. Spero che sarai in grado di scrivere codice multi-thread in Python dopo aver praticato gli esempi di questo tutorial.