从内存中读取字节io.BytesIO后是否可以删除它们?

问题描述 投票:1回答:1

我想使用io的BytesIO类来创建数据流,但是如果我通过它通过管道传输大量数据,它将使用大量内存,因此我在询问是否有可能释放“旧”使用的内存我已经读过的数据。

如果io模块无法做到这一点,我愿意接受其他解决方案。

这里是它现在的实现方式:

def __init__():
        self.audio: av.container.InputContainer = av.open(
            stream, "r", timeout=8, options=options, format="webm"
        )
        self.audio_stream: av.audio.stream.AudioStream = self.audio.streams.get(
            audio=0
        )[0]

        self.output_buffer: io.BytesIO = io.BytesIO(b"")
        self.output_container: av.container.OutputContainer = av.open(
            self.output_buffer, "w", format="opus"
        )

        self.output_stream: av.audio.stream.AudioStream = self.output_container.add_stream(
            "libopus", 48000
        )

...


def fill(self):
    position = 0
    for packet in self.audio.demux(self.audio_stream):
        packet: av.Packet
        position += packet.duration
        self.output_buffer.seek(0, 2)
        self.output_container.mux_one(packet)

...

# then you can read from the buffer with
b = self.output_buffer.read(bytes_to_read)
# this should be Opus Encoded Audio data in bytes format

谢谢你!

python file stream
1个回答
0
投票

对于仍在阅读的每个人,我都找到了适合我的解决方案。使用python的os模块,您可以创建一个新管道(os.pipe()),该管道可以为您处理所有这些任务。

© www.soinside.com 2019 - 2024. All rights reserved.