Python 使用 aiohttp 的异步函数调用
Python asynchronous function calls using aiohttp
我正在努力更好地理解 aiohttp。有人可以检查为什么我的代码不打印请求的响应,而只是打印协程。
import asyncio
import aiohttp
import requests
async def get_event_1(session):
url = "https://whosebug.com/"
headers = {
'content-Type': 'application/json'
}
response = await session.request('GET', url)
return response.json()
async def get_event_2(session):
url = "https://google.com"
headers = {
'content-Type': 'application/json'
}
response = await session.request('GET', url)
return response.json()
async def main():
async with aiohttp.ClientSession() as session:
return await asyncio.gather(
get_event_1(session),
get_event_2(session)
)
loop = asyncio.get_event_loop()
x = loop.run_until_complete(main())
loop.close()
print(x)
输出:
$ python async.py
[<coroutine object ClientResponse.json at 0x10567ae60>, <coroutine object ClientResponse.json at 0x10567aef0>]
sys:1: RuntimeWarning: coroutine 'ClientResponse.json' was never awaited
我该如何打印回复?
您收到的错误消息通知您从未等待协程。
从aiohttp文档中可以看出,response.json()
也是一个协程,因此必须等待。 https://docs.aiohttp.org/en/stable/client_quickstart.html#json-response-content
return await response.json()
我正在努力更好地理解 aiohttp。有人可以检查为什么我的代码不打印请求的响应,而只是打印协程。
import asyncio
import aiohttp
import requests
async def get_event_1(session):
url = "https://whosebug.com/"
headers = {
'content-Type': 'application/json'
}
response = await session.request('GET', url)
return response.json()
async def get_event_2(session):
url = "https://google.com"
headers = {
'content-Type': 'application/json'
}
response = await session.request('GET', url)
return response.json()
async def main():
async with aiohttp.ClientSession() as session:
return await asyncio.gather(
get_event_1(session),
get_event_2(session)
)
loop = asyncio.get_event_loop()
x = loop.run_until_complete(main())
loop.close()
print(x)
输出:
$ python async.py
[<coroutine object ClientResponse.json at 0x10567ae60>, <coroutine object ClientResponse.json at 0x10567aef0>]
sys:1: RuntimeWarning: coroutine 'ClientResponse.json' was never awaited
我该如何打印回复?
您收到的错误消息通知您从未等待协程。
从aiohttp文档中可以看出,response.json()
也是一个协程,因此必须等待。 https://docs.aiohttp.org/en/stable/client_quickstart.html#json-response-content
return await response.json()