TLDR: Sto cercando una spiegazione completa o autorevole (tutorial/libro/presentazione/...) di asyncio per gli sviluppatori di applicazioni.risorse per l'apprendimento/comprensione di asyncio di Python
Mentre conosco bene i loop di eventi e i futures/posticipi/promesse (in gran parte grazie a JavaScript), in qualche modo le complessità dell'asyncio di Python continuano a confondermi. asyncio sembra molto più complesso di quello a cui sono abituato - presumibilmente perché è stato parzialmente progettato per la compatibilità a basso livello con le implementazioni esistenti (Twisted, Tornado ecc.) e perché consente più loop di eventi in thread separati.
Per quanto posso dire, non c'è nessuna procedura dettagliata completa dei concetti di base, così ho consultato il official docs così come vari articles e presentations tutto il web.
Tuttavia, rimango incerto sulla mia comprensione, molto probabilmente perché non è sempre chiaro ciò che è rilevante a livello di applicazione o se non è necessario preoccuparsi delle alternative di cui sopra. (Molte risorse sembrano assumere la familiarità con Twisted et al.)
Alcuni esempi di cose che hanno indotto l'incertezza per me:
- Finora ho usato solo in combinazione con
asyncio.coroutine
yield from
, ma this comparison suggerisce Dovrei riconsiderare. - Un server può essere sia creata usando
loop.create_server(MyProtocol)
oasyncio.start_server(my_connection_handler)
- quando vorrei utilizzare? - Qual è la corretta igiene nella gestione del ciclo di vita loop (ad esempio
loop.close()
dopoloop.run_forever()
)? - devo ancora capire perché
Task
s sono necessari in aggiunta aFuture
s. - Cosa succede se un costruttore di classi non è bloccante (ad esempio, utilizzare
yield from
, che sembra non essere valido)? - Può getter classe essere asincrona (cioè dell'incontro fra
@property
easyncio.coroutine
)? - Come faccio a sapere se una determinata funzione è asincrona? Ad esempio, mi aspetterei che
StreamWriter.write
non blocchi, ma non so se sia effettivamente così.
Non sto chiedendo risposte a queste domande particolari, non fanno che illustrano come sto lottando a livello concettuale.
Se ti stai chiedendo per il libro o tutorial io non posso aiutarti. Ma posso rispondere a qualche domanda particolare su asyncio. –
Grazie. In questo momento, non sono sicuro che abbia senso trasformare le precedenti in singole domande, in quanto ciò non aiuterebbe la mia comprensione a livello concettuale. Forse lo sto pensando troppo, quindi lo prenderò in considerazione. – AnC