我正在寫一個程序,將做高速數據採集。採集卡可以運行在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 –