如何连接我不以流式方式控制的 read() 和 write() 调用?

How to connect read() and write() calls that I don't control in a streaming manner?

提问人:Kache 提问时间:1/18/2023 最后编辑:Kache 更新时间:1/18/2023 访问量:23

问:

假设我想通过接受可读文件 obj 的东西来流式传输一些 json,例如最终执行以下操作的 SFTP 客户端

size = 0
while True:
    data = reader.read(BUFF_LEN)
    writer.write(data)
    size += len(data)
    if len(data) == 0:
        break
return size

但我的数据源是 json 的“流式处理 API”,它急切地迭代

for chunk in iterable:
    fp.write(chunk)

它实际上并不像生成器那样“流式传输”(我希望它只是返回可迭代对象)。

我只能控制传入的“I/O 对象”,而不能控制 read()/write() 调用。是否可以将它们与一些中间缓冲区“流连接”,这些缓冲区不会将整个序列化有效负载保存在内存中?没有线程怎么样?

class MyBuffer:  # what should this be
    def read(self, len):
        pass

    def write(self, data):
        pass


rw_connection = MyBuffer()

json.dump(my_large_data, rw_connection)  # uncontrollable writes

with sftp_impl() as sftp:
    sftp.putfo(rw_connection, 'my_filename.json')  # uncontrollable reads
Python IO

评论

0赞 Kache 1/18/2023
我刚刚发现了 pypi.org/project/json-stream/#writing 这似乎证实了这是 stdlib 实现的硬限制......json

答: 暂无答案