gpt4 book ai didi

python-3.x - 使用 asyncio 等待方法并将变量分配给返回值?

转载 作者:行者123 更新时间:2023-12-02 12:41:26 24 4
gpt4 key购买 nike

我正在使用 asyncio 和 requests 来尝试制作核心模块异步程序。我在尝试做这样的事情时遇到了困难

import asyncio
import requests
async def main():
await r = requests.get(URL)

我以为这样做是等待get请求完成,然后获取返回值并将其放入r中,但是发生了这个错误

  File "prog.py", line 20
await r = requests.get(URL)
^
SyntaxError: can't assign to await expression

r = wait requests.get(URL) 似乎也不起作用,给出

prog.py:31: RuntimeWarning: coroutine 'coroutine' was never awaited
coroutine(args)

有人知道怎么做吗?

最佳答案

如何使用await

await 只能用于等待 coroutine - 通过调用使用 async def 定义的函数返回的特殊对象:

import asyncio


async def test():
return True


async def main():

# test() returns coroutine:
coro = test()
print(coro) # <coroutine object test at ...>


# we can await for coroutine to get result:
res = await coro
print(res) # True



if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

另请阅读this answer关于使用asyncio

为什么 await requests.get(URL) 不起作用?

因为 requests.get 不是协程(它不是用 async def 定义的),它本质上是常规函数。

如果您想异步发出请求,您应该使用特殊的异步模块,例如aiohttp,或者使用线程将请求包装到协程中。请参阅代码片段here对于这两个例子。

关于python-3.x - 使用 asyncio 等待方法并将变量分配给返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com