我正在写一个程序,将做高速数据采集。采集卡可以运行在6.8 GB/s(在PCIe3 x8上)。现在,我正在尝试流入RAM磁盘以查看我可以用Python实现的最大写入速度。如何用Python实现最大的写入速度?
该卡将给我5-10 MB块,然后我可以在某处写入。
我写了这段代码,它将一个10MB的块写入一个二进制文件500次。我在Windows 7 64位上使用Anaconda2,并使用了Anaconda加速器中的剖析器。
block = 'A'*10*1024*1024
filename = "R:\\test"
f = os.open(filename, os.O_CREAT| os.O_BINARY|os.O_TRUNC|os.O_WRONLY|os.O_SEQUENTIAL)
p = profiler.Profile(signatures=False)
p.enable()
start = time.clock()
for x in range(500):
os.write(f,block)
transferTime_sec = time.clock() - start
p.disable()
p.print_stats()
print('\nwrote %f MB' % (os.stat(filename).st_size/(1024*1024)))
我测试了这一个RAM磁盘(R:\)上我得到了以下的输出:
所以我想,我得到的东西约2.5 GB/s的内存。这并不差,但仍然远远超过最大内存吞吐量,但数字是一致的。所以低吞吐量是一个问题。
第二个问题是,当我用PCIe SSD(我用另一个软件以1090 MB/s连续写入为基准)测试此代码时,它给出了可比较的数字。
这让我觉得,它的缓存和/或缓冲(?)等我只是没有测量实际IO。我不确定发生了什么事情,因为我对python相当陌生。
所以我的主要问题是如何实现最大写入速度,而侧面的问题是为什么我得到这些数字?
我在想,为什么你用'os.open()'而不是'open()'? –
男性肯定没有进程拦截写入,是的,我看着你的Windows后卫。 –
@ShadyAtef对文件属性的更多控制,可能是直接IO –