gpt4 book ai didi

python - 如何使用 asyncio/aiohttp 确定最佳缓冲区大小

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

在 python 中使用 asyncio 时,我们如何确定 read() 的最佳参数? 12 个字节? 100 字节?

async with self._session.get(url, headers=headers) as response:
chunk_size = 12
result = ''

while True:
chunk = await response.content.read(chunk_size)
if not chunk:
break
elif isinstance(chunk, (bytes, bytearray)):
data = chunk.decode('utf8')
result += data

最佳答案

How do we decide the optimal parameter for read() when working with asyncio in python? 12 bytes? 100 bytes?

您可以安全地选择一个比这个大得多的数字。如果数字太小(例如只有 1),您的循环将包含对 StreamReader.read 的多次调用,每个调用都会带来固定的开销 - 它必须检查缓冲区中是否有内容,然后返回其中的一部分并更新剩余的缓冲区,或者等待新的东西到达。另一方面,如果请求的大小过大,理论上可能需要不必要的大分配。但是由于允许 StreamReader.read 返回比指定的少的数据,它永远不会返回大于内部缓冲区的 block (64 KiB by default ),所以这不是问题。

总结:任何大于 1024 左右的数字都可以,因为它足够大,可以避免不必要的函数调用次数。在大多数情况下,请求超过 65536 与请求 65536 相同。当我不关心绝对最佳性能时,我倾向于请求 1024 字节(调试时更小的 block 更容易在眼睛上),而更大的值,如 16384,当我做。数字不一定是 2 的幂,顺便说一句,这只是低级语言的约定。

专门处理aiohttp流时,可以调用readany ,一种只返回任何可用数据的方法,如果没有可用数据,则等待一些数据到达并返回它。如果您正在处理 aiohttp 流,这可能是最佳选择,因为它只为您提供来自内部缓冲区的数据,而不必担心其大小。

关于python - 如何使用 asyncio/aiohttp 确定最佳缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66284917/

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