19 luglio 2024

Pillola di Python #13 - Programmazione asincrona con asyncio



Python offre un potente modulo chiamato asyncio per la programmazione asincrona, che permette di scrivere codice non bloccante utilizzando le parole chiave async e await. Questo approccio è ideale per gestire operazioni I/O-bound come richieste di rete, lettura/scrittura su file, e altre attività che possono beneficiare della concorrenza senza il sovraccarico dei thread o dei processi.

Introduzione a asyncio

asyncio è stato introdotto in Python 3.4 e permette di eseguire funzioni asincrone in un ciclo di eventi (event loop). Le funzioni asincrone sono definite con la parola chiave async, e le chiamate a funzioni asincrone utilizzano la parola chiave await.

Esempio Base di asyncio

Vediamo un esempio di base per capire come funziona asyncio:



Si otterrà:
Ciao, Dee!
Ciao, Kiki!
Ciao, Bolla!
Arrivederci, Dee!
Arrivederci, Kiki!
Arrivederci, Bolla!
Cosa abbiamo fatto con quel codice? Vediamolo insieme:
- Siamo partiti dalla Definizione di Funzioni Asincrone, saluta(nome) è una funzione asincrona che stampa un messaggio di saluto, aspetta un secondo (simulando un'attività I/O), e poi stampa un messaggio di congedo.
- main() è la funzione principale asincrona che utilizza asyncio.gather per eseguire più funzioni saluta in parallelo.
- Si eseguono gli eventi ed asyncio.run(main()) esegue la funzione main all'interno del ciclo di eventi, gestendo automaticamente l'avvio e la chiusura.

Ovviamente questo è un esempio basilare, l'argomento è vastissimo, ma la programmazione asincrona con asyncio permette di scrivere codice non bloccante che può gestire operazioni I/O in modo efficiente. Utilizzando async e await, è possibile eseguire funzioni asincrone in parallelo, migliorando le prestazioni delle applicazioni che richiedono molte operazioni I/O. Sperimenta con asyncio per vedere come può migliorare il tuo prossimo progetto Python!

01 luglio 2024

Pillola di Python #12 - La Potenza dei Decoratori



I decoratori in Python sono una funzionalità potente e flessibile che permette di modificare il comportamento di una funzione o di una classe. Questa funzionalità è particolarmente utile per implementare aspetti trasversali come la registrazione dei log, la gestione delle transazioni e la convalida degli input.

Che Cosa Sono i Decoratori?
In sintesi, un decoratore è una funzione che prende un'altra funzione e ritorna una nuova funzione con un comportamento esteso o modificato. Ecco un esempio base:


L'output sarà... rullo di tamburi:
Qualcosa sta accadendo prima della funzione.
Eseguendo la funzione principale.
Qualcosa sta accadendo dopo la funzione.
I decoratori possono anche accettare argomenti. Questo permette di creare decoratori altamente configurabili:


Ed otterrete:
Ciao, Dee!
Ciao, Dee!
Ciao, Dee!

I decoratori sono un potente strumento che può essere utilizzato per migliorare la leggibilità e la manutenibilità del codice. Possono essere utilizzati per implementare funzionalità trasversali in modo pulito ed efficiente, riducendo la duplicazione del codice e migliorando la separazione delle preoccupazioni.

Sperimentate con i decoratori nel vostro prossimo progetto Python per vedere come possono semplificare e migliorare il vostro codice!

Tondo è bello...

Tondo è bello...