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 consleep(), 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,
task1etask2vengono eseguiti in modo concorrente. Di conseguenza,task2si 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-excepte i relativi messaggi di errore gestiti in modo sicuro. L'eccezione dafaulty_taskviene catturata all'interno dimaine 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.