Skip to main content
 首页 » 编程设计

Python之基准测试磁盘之在文件中准确写入 x 字节

2025年05月04日17JustinYoung

我正在尝试对我的硬盘进行基准测试,也就是说计算它的延迟 (ms) 和吞吐量 (MB/s)。 为此,我想测量 Python 函数 f.write 的执行时间。 我需要的是将 x 个字节准确地写入我的文件。 我知道我需要使用

打开我的文件
f = open(file_name, 'wb') 

那我做的就是

for i in range(blocksize) 
    f.write(b'\xff') 

但是,我获得的吞吐量 (MB/s) 结果太低了。延迟看起来是正确的。所以我推断,当我执行前几行时,我实际上是在向文件写入多个字节,我正在写入一个包含一个字节的字符串...... 我知道该对象在 Python 中实际上没有大小,但有没有办法解决这个问题?

编辑 好的,这是新代码,现在结果莫名其妙地太高了!我的磁盘写入限制应该是 100MB/s,但我的结果快了十倍。怎么了 ? 导入系统 导入时间

f = open("test.txt",'wb+') 
 
def file_write_seq_access(blocksize): 
    chunk = b'\xff'*4000 
    for i in range(blocksize//4000): 
        f.write(chunk) 
 
if __name__ == '__main__': 
    start_time = time.time() 
    file_write_seq_access(int(sys.argv[1])) 
    stop_time = time.time() 
    diff = stop_time - start_time  
    print diff, "s" 
    print (int(sys.argv[1])/diff),"B/s"  

请您参考如下方法:

简单地说,Python 对于这种逐字节写入的速度不够快,而且文件缓冲和类似操作会增加太多开销。

你应该做的是分块操作:

import sys 
 
blocksize = int(sys.argv[1]) 
 
chunk = b'\xff'*10000 
with open("file.file", "wb") as f: 
    for _ in range(blocksize // 10000): 
        f.write(chunk) 

可能使用 PyPy 应该进一步(非常小,可能是负面的)加速。

请注意,操作系统会干扰此处的计时,因此会有很多差异。使用 C 可能会更快。


在做了一些计时之后,这与 dd 的速度匹配,所以你不会变得更快。