Descrizione

Un piccolo decoratore Python per eseguire in maniera asincrona funzioni sincrone.

Awaitable può essere utile quando si desidera eseguire in maniera asincrona una funzione sincrona che non può essere riscritta in maniera asincrona utilizzando await poiché potrebbe contenere del codice che non può essere atteso, per la presenza di librerie di terze parti oppure se alcune funzioni sono utilizzate in altre parti del codice in maniera sincrona.

Il decoratore awaitable permette di dichiarare le funzioni sincrone come attese, in modo da poter essere eseguite da un’altra funzione asincrona.

import awaitable

@awaitable.awaitable
def do_something():
    # processa un singolo task
    return

AsyncioGather

La classe AsyncioGather può essere utilizzata per processare alcuni task usando asyncio, raccogliendo i task da eseguire ed eseguendoli, per processarli raggruppati in maniera asincrona.

L’esempio seguente dichiara una funzione do_something come attesa e all’interno della funzione process si definisce un gruppo di task per raccogliere, anche con argomenti differenti o funzioni asincrone differenti (sia davvero attese sia fatte attraverso il decoratore awaitable).

Il gruppo di task sarà utilizzato per eseguire dopo attraverso run() le chiamate alle funzioni asincrone.

import awaitable

@awaitable.awaitable
def do_something():
    # fai qualcosa con attività I/O intensa che può essere attesa
    return

async def process(count):
    # esegui alcuni lavori
    tasks = awaitable.AsyncioGather()
    for i in range(count):
        tasks.add(do_something())
    await tasks.run()

Utilizzando tasks.run() tutti i task all’interno del gruppo AsyncioGather verranno eseguiti e saranno processati in maniera asincrona.

awaitable.run_awaitable(func=process, count=10)

La funzione run_awaitable eseguira la funzione asincrona process(count=10) per raccogliere e processare ogni task generato.

Installazione

I rilasci delle versioni stabili con codice sorgente e pacchetti precompilati sono presenti nella pagina Scarica. Per informazioni sull'installazione da pacchetti o con codice sorgente fare riferimento alla pagina Installazione.

Il codice sorgente di Awaitable è disponibile su GitHub con la versione attualmente in sviluppo.

Licenza

Awaitable viene distribuito sotto forma di codice sorgente aperto disponibile su GitHub sotto licenza GNU GPL-3+ (GNU General Public License versione 3 o superiore). Il software viene fornito così com'è e non è offerto alcun tipo di garanzia. Chiunque può derivare il progetto, modificarlo e distribuirlo purchè il nuovo progetto derivato sia rilasciato sotto la stessa licenza GNU GPL-3+.