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()