ペップ0492新しい__await__
マジックメソッドを追加します。このメソッドを実装するオブジェクトは未来的な物体および を使用して待機できますawait
。明らかです:
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())
async def
わかりました。しかし、の代わりに定義された関数を呼び出したい場合はどうすればよいでしょうかasyncio.sleep
。は関数ではないawait
ため、 は使用できません。ネイティブ コルーチンには式が必要なので、 は使用できません。__await__
async
yield from
await
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')
どうすれば解決できますか?
ベストアンサー1
直接__await__()
通話を使用する:
async def new_sleep():
await asyncio.sleep(2)
class Waiting:
def __await__(self):
return new_sleep().__await__()
この解決策は、ユーリ・セリヴァノフ(ペップ492) のためにaioodbc ライブラリ