future のようなオブジェクトの __await__ 内で待機するにはどうすればいいですか? 質問する

future のようなオブジェクトの __await__ 内で待機するにはどうすればいいですか? 質問する

ペップ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__asyncyield fromawait

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 ライブラリ

おすすめ記事