【发布时间】:2020-10-18 20:29:29
【问题描述】:
我目前正在尝试做这样的事情:
import asyncio
class Dummy:
def method(self):
return 1
def __str__(self):
return "THIS IS A DUMMY CLASS"
async def start_doing():
asyncio.sleep(1)
return Dummy
async def do_something():
return start_doing().method()
async def main():
a = asyncio.create_task(do_something())
b = asyncio.create_task(do_something())
results = await asyncio.gather(a, b)
print(results)
asyncio.run(main())
但我收到此错误:
AttributeError: 'coroutine' object has no attribute 'method'
这表明我不能在协程对象上调用我的方法。解决此问题的一种方法是执行以下操作:
async def do_something():
return (await start_doing()).method()
但我认为通过这样做,您本质上就是使您的代码同步。您不是在生成未来,而是在 do_something 中等待您的工作完成,然后继续执行队列中的下一项。
当 awaitable 已被等待并且我的对象已准备好时,我应该如何调用对象方法?如何安排它在未来被调用?
【问题讨论】:
标签: python python-3.x asynchronous async-await python-asyncio