在课堂上启动异步任务?

时间:2018-04-05 14:11:16

标签: python python-3.x

我有以下代码:

import asyncio

class Test:

    async def hello_world(self):
            while True:
                print("Hello World!")
                await asyncio.sleep(1)

test = Test()

loop = asyncio.get_event_loop()
# Blocking call which returns when the hello_world() coroutine is done
loop.run_until_complete(test.hello_world())
loop.close()

有没有办法让hello_world函数从类中开始运行(当创建类的对象时)而不从外部执行它?

1 个答案:

答案 0 :(得分:1)

异步构造函数是否需要你的技巧?为了能够实现这样的用法:

async def main():
    test = await Test()

您只需要让异步构造函数返回self并向您的类中添加__await__方法:

class Test:

    async def hello_world(self):
        while True:
            print("Hello World!")
            await asyncio.sleep(1)
        return self

    def __await__(self):
        return self.hello_world().__await__()