Ich schreibe ein Programm, das Hochgeschwindigkeitsdatenerfassung durchführen wird. Die Erfassungskarte kann mit bis zu 6,8 GB/s laufen (auf PCIe3 x8). Im Moment versuche ich auf eine RAM-Disk zu streamen, um die maximale Schreibgeschwindigkeit zu sehen, die ich mit Python erreichen kann.Wie erreicht man maximale Schreibgeschwindigkeit mit Python?
Die Karte wird mir 5-10 MB Blöcke geben, die ich dann irgendwo schreiben kann.
Ich schrieb dieses Stück Code, der einen 10MB Block 500 Mal in eine Binärdatei schreibt. Ich benutze Anaconda2 unter Windows 7 64-Bit, und ich habe den Profiler von Anacondas Beschleunigung verwendet.
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)))
Getestet habe ich diese auf einer RAM-Disk (R: \) und ich bekam die folgende Ausgabe:
Also dachte ich, ich bin immer etwas rund 2,5 GB/s auf RAM. Das ist zwar nicht schlecht aber weit vom maximalen RAM Durchsatz, aber die Zahlen sind konsistent. Der geringe Durchsatz ist also ein Problem.
Das zweite Problem ist, wenn ich diesen Code mit einer PCIe SSD (die ich mit einer anderen Software mit 1090 MB/s sequentiellem Schreiben Benchmarking) getestet hat, gibt es vergleichbare Zahlen.
Das macht ich denke, dass es Caching und/oder Pufferung (?) Und so bin ich nur nicht unbedingt IO messen. Ich bin mir nicht sicher, was wirklich passiert, da ich mit Python ziemlich neu bin.
Also meine Hauptfrage ist, wie man maximale Schreibgeschwindigkeiten erreicht, und eine Nebenfrage ist, warum bekomme ich diese Zahlen?
Ich frage mich, warum Sie 'os.open()' anstelle von 'open()' ?? –
Male sicher keine Prozesse abfangen schreibt, ja ich sehe dich Windows Defender. –
@ShadyAtef Mehr Kontrolle über Dateiattribute, möglicherweise direkte IO –