我想将数据直接流式传输到磁盘。
其中一种方法是简单地读取数据并写入文件,但我也想最大限度地减少RAM的使用。
with open("dummy.source", "br") as out, open("dummy.copy", "bw") as in_:
in_.write(out.read()) # this causes reading the whole stream into memory
我已经想出了一些手动的方法:
with open("dummy.source", "br") as out, open("dummy.copy", "bw") as in_:
while b := out.read(BUFFER_SIZE):
in_.write(b)
我真的必须手动逐个加载流吗?如果是,如何确定BUFFER_SIZE
的最佳值?
缓冲区大小的最佳值很可能是python已经保留的缓冲区大小,在大多数系统上为8192
字节,但任何低于该值的值都可以,因为IO无论如何都会被python缓冲。
您可以使用open
的buffering
参数来更改它,但8192
是许多系统上的最佳大小。
实际上,您可以使用从当前的python解释器中获取它
from io import DEFAULT_BUFFER_SIZE
这是为了防止将来或对于给定的python解释器进行更改。