PEP 0492 fügt neue __await__
magische Methode hinzu. Objekt, das diese Methode implementiert, wird Zukunftsobjekt und kann mit await
erwartet werden. Es ist klar:Wie kann ich im __await__ des zukünftigen Objekts warten?
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, aber was ist, wenn ich will einige async def
definierte Funktion statt asyncio.sleep
anrufen? Ich kann nicht await
verwenden, da __await__
nicht async
Funktion ist, kann ich nicht, weil yield from
nativer Koroutinen erfordert await
Ausdruck:
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')
Wie kann ich es lösen?
Gibt es einen Grund, warum Sie können es als eine separate Asynchron-Funktion innerhalb der Warte Klasse nicht nur implementieren? Warten Sie also auf Waiting.new_sleep()? – shongololo