我async
在一个单独的脚本中有一个带有关键字的函数,它是这样的:
async def search_gifs(self, query:str, limit:int = 25, offset:int = 0, rating: rating = rating.G, lang:language = None):
if language == None:
lang_to_use = self.lang
result = await requests.get(self.end_point + "gifs/search", api_key = self.key, q = query, limit=limit, offset=offset, rating=rating.value, lang=lang_to_use.value)
print(result.json())
但是,当我尝试使用 调用它时await
,它会引发SintaxError
.
await client.search_gifs("lol")
>>> await client.search_gifs("lol")
^
SyntaxError: invalid syntax
(search_gifs
是Client
类中的一个函数)
难道我做错了什么?我正在使用 Python 3.6
await
仅在 内有效async def
,因此它在顶层不起作用。这是因为 的约定await
是它必须能够挂起当前的协程,而在顶层没有协程可以挂起。
要从解释器测试协程asyncio.run
,请在 Python 3.6 中使用或run_until_complete
:
>>> asyncio.get_event_loop().run_until_complete(client.search_gifs("lol"))
您的代码的另一个问题是它await requests.get(...)
不起作用,因为requests
它不是异步库。相反,请使用异步感知库,例如aiohttp
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句