【问题标题】:Python asynchronous function calls using aiohttp使用 aiohttp 的 Python 异步函数调用
【发布时间】:2020-08-29 06:29:03
【问题描述】:

我正在尝试更好地理解 aiohttp。有人可以检查为什么我的代码没有打印请求的响应,而是只打印协程。

import asyncio
import aiohttp
import requests

async def get_event_1(session):
    url = "https://stackoverflow.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

我如何打印回复?

【问题讨论】:

  • 你也需要等待 response.json()return await response.json()

标签: python-3.x async-await python-asyncio aiohttp


【解决方案1】:

您收到的错误消息是通知您从未等待过协程。

从 aiohttp 文档中可以看到,response.json() 也是一个协程,因此必须等待。 https://docs.aiohttp.org/en/stable/client_quickstart.html#json-response-content

return await response.json()

【讨论】:

    猜你喜欢
    • 2019-01-06
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2022-12-04
    相关资源
    最近更新 更多