gpt4 book ai didi

python - 如何在 Python 中使用 aiohttp 读取流式 api 的行?

转载 作者:行者123 更新时间:2023-12-01 21:49:43 26 4
gpt4 key购买 nike

我正在尝试将具有 requests 功能的 Python HTTP 客户端转换为 aiohttp。逻辑是向 REST 端点发送 GET 调用,该端点偶尔流式传输数据并打印它返回的行。

我有一个使用 requests 的代码使用 stream=True 选项和 iter_lines,它工作得很好:

import json
import requests

def main():
with requests.get('https://my-streaming-url.com', stream=True) as r:
if r.encoding is None:
r.encoding = 'utf-8'
for line in r.iter_lines(decode_unicode=True):
if line:
# Print each line emitted by the streaming api
print(json.loads(line))

if __name__ == '__main__':
main()

现在,我想将此逻辑转换为 aiohttp streaming api并尝试:

import asyncio
import aiohttp
import json

loop = asyncio.get_event_loop()

async def main():
r = aiohttp.request('get', 'https://my-streaming-url.com')
async for line in r.content:
print(json.loads(line))

if __name__ == '__main__':
loop.run_until_complete(connect_and_listen())
loop.close()

我收到如下错误:

... in connect_and_listen

async for line in r.content:

AttributeError: '_SessionRequestContextManager' object has no attribute 'content'

sys:1: RuntimeWarning: coroutine 'ClientSession._request' was never awaited

Unclosed client session

client_session: aiohttp.client.ClientSession object at 0x7fac6ec24310

我尝试了一些方法,比如从 main 中删除 loop.close(),从 for 中删除 async > 循环,但没有任何帮助。

我在这里错过了什么?如何使用 aiohttp 打印流式 api 行?

P.S: 我的 Python 版本是 3.7.5

最佳答案

在整个文档中使用 ClientSession类是鼓励的,我有这段代码也封装了一个 session ,如下所示并且它有效:

async def main():
async with aiohttp.ClientSession(raise_for_status=True) as session:
async with session.get(cashcog_stream_url) as r:
async for line in r.content:

另一点是 loop.close() 显然不会影响应用程序的工作方式,可以将其删除。

关于python - 如何在 Python 中使用 aiohttp 读取流式 api 的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59681726/

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