Elaborazione asincrona in Python

Elaborazione asincrona in Python

Questo articolo spiega l'elaborazione asincrona in Python.

Puoi apprendere esempi di codice per l'utilizzo di base di async/await e del modulo asyncio in Python.

YouTube Video

Elaborazione asincrona in Python

L'elaborazione asincrona in Python è un meccanismo per gestire in modo efficiente operazioni di I/O che richiedono molto tempo, come la lettura e la scrittura di file o la comunicazione di rete. Nell'elaborazione sincrona, l'operazione successiva attende che quella corrente termini, ma con l'elaborazione asincrona è possibile svolgere altre attività durante il tempo di attesa. In Python, il modulo asyncio è fornito per eseguire l'elaborazione asincrona. Qui spiegheremo i suoi elementi di base e come utilizzarli passo dopo passo.

Sintassi di Base

Al centro dell'elaborazione asincrona ci sono funzioni chiamate coroutine. Le funzioni async definiscono funzioni asincrone e await viene utilizzato per attendere un'attività asincrona all'interno di tali funzioni.

 1import asyncio
 2
 3async def say_hello():
 4    print("Hello")
 5    await asyncio.sleep(1)
 6    print("World")
 7
 8if __name__ == "__main__":
 9    # Execute asynchronous task
10    asyncio.run(say_hello())
  • Nel codice sopra, la funzione say_hello è definita come un'attività asincrona. Mentre si aspetta un secondo con sleep(), possono essere eseguiti altri task asincroni.

Esecuzione di più attività

Utilizzando la funzione gather del modulo asyncio, è possibile eseguire più task simultaneamente.

 1import asyncio
 2
 3async def task1():
 4    print("Task 1 started")
 5    await asyncio.sleep(2)
 6    print("Task 1 completed")
 7
 8async def task2():
 9    print("Task 2 started")
10    await asyncio.sleep(1)
11    print("Task 2 completed")
12
13async def main():
14    await asyncio.gather(task1(), task2())
15
16if __name__ == "__main__":
17    asyncio.run(main())
  • In questo esempio, task1 e task2 vengono eseguiti in modo concorrente. Di conseguenza, task2 si completa per primo tra i due compiti, ma il tempo totale di esecuzione equivale al tempo di esecuzione del compito più lungo.

Gestione degli errori

Anche nell'elaborazione asincrona è importante gestire gli errori. È possibile catturare e gestire gli errori utilizzando la sintassi standard try-except.

 1import asyncio
 2
 3async def faulty_task():
 4    raise Exception("An error occurred")
 5
 6async def main():
 7    try:
 8        await faulty_task()
 9    except Exception as e:
10        print(f"Caught an error: {e}")
11
12if __name__ == "__main__":
13    asyncio.run(main())
  • Questo codice mostra come le eccezioni che si verificano all'interno delle funzioni asincrone possano essere catturate con try-except e i relativi messaggi di errore gestiti in modo sicuro. L'eccezione da faulty_task viene catturata all'interno di main e viene visualizzata in modo appropriato.

Riepilogo

L'elaborazione asincrona in Python utilizza async / await e asyncio per eseguire altre attività in modo concorrente durante l'attesa dell'I/O, consentendo un'elaborazione efficiente. Sfruttando l'esecuzione concorrente di più attività e l'I/O asincrono, è possibile migliorare notevolmente le prestazioni. Inoltre, poiché è possibile gestire gli errori proprio come con il normale try-except, è possibile eseguire il codice asincrono in modo sicuro.

Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.

YouTube Video