PEP 0492 aggiunge il nuovo metodo magico __await__
. L'oggetto che implementa questo metodo diventa oggetto simile al futuro e può essere atteso utilizzando await
. E 'chiaro:Come posso aspettare __await__ di un oggetto simile a un futuro?
import asyncio
class Waiting:
def __await__(self):
yield from asyncio.sleep(2)
print('ok')
async def main():
await Waiting()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Ok, ma cosa succede se voglio chiamare alcuni async def
definita funzione invece di asyncio.sleep
? Non posso usare await
perché __await__
non è async
funzione, non posso usare perché yield from
coroutine native richiede await
espressione:
async def new_sleep():
await asyncio.sleep(2)
class Waiting:
def __await__(self):
yield from new_sleep() # this is TypeError
await new_sleep() # this is SyntaxError
print('ok')
Come posso risolverlo?
C'è qualche motivo non si può semplicemente attuarla come una funzione asincrona separata all'interno della classe in attesa? Quindi, aspetta Waiting.new_sleep()? – shongololo