gpt4 book ai didi

python - 将生成器包装到缓冲区中?

转载 作者:行者123 更新时间:2023-11-28 16:25:48 25 4
gpt4 key购买 nike

我有一个生成文件部分的 python 生成器(一个 wsgi app_iter),我需要将它传递给一个接口(interface),该接口(interface)期望它具有经典的 readreadlines 方法(我想将它作为另一个 Requestwsgi.input 传递)。

有没有可能以一种不将整个生成器内容具体化到内存中的方式来做到这一点?这个想法是将生成器包装在具有 readreadline 的东西中(例如 BytesIOStringIO)和以懒惰的方式去做。

最佳答案

这当然是可能的。这是一段效率极低的代码,可以为您提供想法:

class ReadWrapper:
def __init__(self, app_iter):
self.iterator = iter(app_iter)
self.buffer = ''
def readline(self):
while '\n' not in self.buffer:
try:
self.buffer += next(self.iterator)
except StopIteration:
result = self.buffer
self.buffer = ''
return result
idx = self.buffer.find('\n')
result = self.buffer[:idx+1]
self.buffer = self.buffer[idx+1:]
return result

read() 类似,只是您不是在寻找 \n,而是在寻找指定的字节数(或者迭代器的末尾,如果未指定尺寸)。

上面代码的可悲的低效率在于它处理 self.buffer 的方式:你真的不想在整个事情中搜索 \n每一步,或者做很多潜在的大副本。

关于python - 将生成器包装到缓冲区中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36798936/

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