Ho un asynchronous API che sto usando per connettere e inviare posta a un server SMTP che ha un po 'di configurazione e di abbattere. Quindi si adatta perfettamente all'uso di un contextmanager
da Python 3 contextlib
.Gestore di contesto asincrono
Tuttavia, non so se è possibile scrivere perché entrambi usano la sintassi del generatore per scrivere.
Questo potrebbe dimostrare il problema (contiene una combinazione di sintassi di rendimento e asincrono per dimostrare la differenza tra chiamate asincrone e rese al gestore di contesto).
@contextmanager
async def smtp_connection():
client = SMTPAsync()
...
try:
await client.connect(smtp_url, smtp_port)
await client.starttls()
await client.login(smtp_username, smtp_password)
yield client
finally:
await client.quit()
Attualmente questo tipo di cose è possibile all'interno di python? e come dovrei usare una dichiarazione with
as
se lo è? Se no, esiste un modo alternativo per ottenerlo, magari usando il gestore di contesto vecchio stile?
'asyncio' ha introdotto anche un' asincrona with' contesto asincrono protocollo di gestione, vedi: https://www.python.org/dev/peps/pep-0492/#asynchronous-context-managers-and-async-with – jonrsharpe
Questo sembra esattamente quello che voglio. Darà un colpo implementandolo quando avrò la possibilità. – freebie
A partire da 3.7 (rilascio da qualche parte nel 2018), contextlib avrà '@ asynccontextmanager' –