我正在使用第三方模块从API检索数据 . 我只想异步等待模块返回有时需要几秒钟的数据并冻结我的应用程序 . 但是,当我尝试等待对该模块的调用时,我收到TypeError:
TypeError: object dict can't be used in 'await' expression
import thirdPartyAPIwrapper
async def getData():
retrienveData = await thirdPartyAPIWrapper.data()
return await retrieveData
def main():
loop = asncio.get_event_loop()
data = loop.run_until_complete(getData())
loop.close
return data
为什么我不等待类型('dict')?有没有解决的办法?如果asyncio的async / await不能与不返回协程的第三方模块一起使用,那么我的其他选项是什么?
1 回答
只能等待异步(用
async def
定义)函数 . 整个想法是,这些函数是以特殊方式编写的,它们可以在不阻塞事件循环的情况下运行它们(await
) .如果你想从common(用
def
定义)函数获得需要相当长时间才能执行的结果,你有以下选项:将整个函数重写为异步
在另一个线程中调用此函数并等待异步结果
在另一个进程中调用此函数并异步等待结果
通常你想选择第二个选项 .
以下是如何执行此操作的示例:
请阅读this answer,了解asyncio的工作原理 . 我认为它会对你有所帮助 .