私は高速データ取得を行うプログラムを書いています。アクイジションカードは6.8GB/s(PCIe3 x8)です。今私はPythonで達成できる最大書き込み速度を見るためにRAMディスクにストリームしようとしています。Pythonで最大の書き込み速度を達成する方法は?
カードは私に私は、どこかの書き込みに5-10個のMBのブロックを、与えるために起こっています。
私は、バイナリファイルに10メガバイトのブロック500回を書き込む、コードのこの作品を書きました。私はWindows 7 64ビット版でAnaconda2を使用していますが、アナコンダの加速器のプロファイラを使用しました。
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ギガバイトを取得しています/のS考え出し
をRAM。これは悪くないが最大RAMスループットからはまだ遠いが、数字は一貫している。低スループットは1つの問題です。
第二の問題は、私は(I 1090 MB/sのシーケンシャルライトで他のソフトウェアとベンチマークた)のPCIe SSDを用いてこのコードをテストする場合には、それは同等の数値を与えます。
これは私はそれがキャッシングおよび/またはバッファリング(?)ので、私は実際のIOを測定していないよだと思います。私がかなり新しいPythonを使っているから、実際に何が起こっているのか分かりません。
だから私の主な質問は、最大書き込み速度を実現する方法である、とサイドの質問は、なぜ私は、これらの番号を取得していますか?
あなたは 'os.open()')( 'ではなく'オープンを使用し、なぜ私は、疑問に思います? –
男性はプロセスが書き込みを傍受していないことを確認しています。はい、私はあなたにWindows Defenderを見ています。 –
@ShadyAtefファイル属性をより詳細に制御できる可能性があります。直接入力IO –