Pitone

Python Asyncio Tutorial

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

Coroutine: La parte di codice che può essere messa in pausa e ripresa nello script multi-thread è chiamata coroutine. le coroutine lavorano in modo cooperativo in un programma multi-thread. Quando una coroutine va in pausa, può essere eseguita un'altra coroutine.

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

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

Futuro: Funge da deposito futuro in cui il risultato delle coroutine verrà archiviato dopo il completamento. Questo è utile quando qualsiasi coroutine richiede di attendere il risultato di un'altra coroutine.

Come puoi implementare i concetti di cui sopra della libreria asyncio è mostrato in questo tutorial usando alcuni semplici esempi.

Esempio 1: creare una singola coroutine con una singola attività

Crea un file chiamato asincrono.pi e aggiungi il seguente codice. la libreria asyncio viene importata per utilizzare le funzioni di questa libreria. Inserisci la funzione è dichiarata per calcolare la somma di un particolare intervallo di numeri. L'intervallo di numeri da 1 a 101 è assegnato dall'attività con un secondo di ritardo. Il ciclo degli eventi viene dichiarato che verrà eseguito fino al completamento di tutte le attività del metodo principale. Dopo aver calcolato il valore, la funzione attenderà un secondo e stamperà il risultato.

import asyncio
async def add (inizio, fine, attesa):
#Inizializza variabile somma
somma = 0
#Calcola la somma di tutti i numeri
per n nell'intervallo (inizio, fine):
somma += n
#Attendi i secondi assegnati
attendo asincrono.dormi (aspetta)
#Stampa il risultato
print(f'Sum from start to end is sum')
asincrono def main():
#Assegna un singolo compito
compito=ciclo.create_task(add(1,101,1))
#Esegui l'attività in modo asincrono
attendo asincrono.aspetta ([attività])
if __name__ == '__main__':
#Dichiara il ciclo degli eventi
loop = asincrono.get_event_loop()
#Esegui il codice fino al completamento di tutte le attività
ciclo continuo.run_until_complete(main())
#Chiudi il cerchio
ciclo continuo.vicino()

Produzione:

$ python3 asincrono1.pi

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

Esempio 2: creare più coroutine

L'uso della libreria asyncio verrà cancellato quando si eseguiranno più coroutine contemporaneamente. Crea un nuovo file chiamato asincrono2.pi e aggiungi il seguente codice. Vengono generate tre attività con tre diversi intervalli e valori di attesa in principale() metodo. La prima attività calcolerà la somma da 5 a 500000 aspettando 3 secondi, la seconda attività calcolerà la somma da 2 a 300000 aspettando 2 secondi e la terza attività calcolerà la somma da 10 a 1000 aspettando 1 secondo. L'attività con valori di attesa bassi verrà completata all'inizio e l'attività con valore di attesa elevato verrà completata alla fine.

import asyncio
async def add (inizio, fine, attesa):
#Inizializza variabile somma
somma = 0
#Calcola la somma di tutti i numeri
per n nell'intervallo (inizio, fine):
somma += n
#Attendi i secondi assegnati
attendo asincrono.dormi (aspetta)
#Stampa il risultato
print(f'Sum from start to end is sum')
async def main():
#Assegna il primo compito
task1=ciclo.create_task(add(5,50000,3))
#Assegna il secondo compito
task2=loop.create_task(add(2,300000,2))
#Assegna il terzo compito
task3=ciclo.create_task(aggiungi(10,1000,1))
#Esegui le attività in modo asincrono
attendo asyncio.wait([attività1,attività2,attività3])
if __name__ == '__main__':
#Declar event loop
loop = asincrono.get_event_loop()
#Esegui il codice fino al completamento di tutte le attività
ciclo continuo.run_until_complete(main())
#Chiudi il cerchio
ciclo continuo.vicino()

Produzione:

$ python3 asincrono1.pi

L'output mostra che l'attività3 viene completata per prima perché il tempo di attesa di questa attivitàèdi solo 1 secondo e l'attività1 viene completata per ultima perché il tempo di attesa di questa attivitàèdi 3 secondi.

Esempio-3: coroutine con futuro

Questo esempio mostra l'uso dell'oggetto futuro della libreria asyncio. Crea un nuovo file chiamato asincrono3.pi e aggiungi il seguente codice. In questo esempio sono assegnate due attività per il futuro. show_message la funzione è dichiarata qui per stampare il messaggio prima di eseguire la coroutine e dopo aver completato l'esecuzione. La prima attività attenderà 2 secondi e verrà completata per ultima. La seconda attività attenderà 1 secondo e verrà completata per prima.

import asyncio
async def show_message (numero, attesa):
#Stampa il messaggio
print(f'L'attività numero è in esecuzione')
#Attendi i secondi assegnati
attendo asincrono.dormi (aspetta)
print(f'L'attività numero è completata')
async def stop_after(quando):
attendo asyncio.dormire (quando)
ciclo continuo.fermare()
async def main():
#Assegna il primo compito
task1=asyncio.assicurare_futuro(mostra_messaggio(1,2))
print('Programma 1')
#Assegna il secondo compito
task2=asyncio.assicurare_futuro(mostra_messaggio(2,1))
print('Programma 2')
#Esegui le attività in modo asincrono
attendo asyncio.wait([attività1,attività2])
if __name__ == '__main__':
#Dichiara il ciclo degli eventi
loop = asincrono.get_event_loop()
#Esegui il codice del metodo principale fino al completamento di tutte le attività
ciclo continuo.run_until_complete(main())

Produzione:

$ python3 asincrono3.pi

Nell'output viene mostrato che l'attività1 viene avviata per prima e completata per ultima e l'attività2 viene avviata più tardi ma completata prima per un breve tempo di attesa.

Conclusione

Il concetto di base della programmazione asincrona utilizzando 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.

Come installare League Of Legends su Ubuntu 14.04
Se sei un fan di League of Legends, questa è un'opportunità per testare League of Legends. Nota che LOL è supportato su PlayOnLinux se sei un utente L...
Installa l'ultimo gioco di strategia OpenRA su Ubuntu Linux
OpenRA è un motore di gioco di strategia in tempo reale gratuito/libero che ricrea i primi giochi di Westwood come il classico Command & Conquer: Red ...
Installa l'ultimo Dolphin Emulator per Gamecube e Wii su Linux
L'emulatore Dolphin ti consente di giocare ai giochi Gamecube e Wii scelti su Personal Computer Linux (PC). Essendo un emulatore di giochi liberament...