CPU Hole -> Nach einem Tag Faktor 10 langsamer? [Solved]
Verfasst: Mittwoch 18. Mai 2011, 13:08
Hi,
habe folgendes Problem:
Habe ein kleines Script mit dem ich per VISA und GPIB Daten von einem Oszi nehme.
Danach schreibe ich diese Daten als einzelne Dateien in einen Ordner.
Problem ist nun, das nach einem Tag die rate mit der ich Daten nehme ca. um einen Faktor 10 bis 100 einbricht.
Der CPU ist statt 3% am ersten Tag zu 100% ausgelastet.
Ein Neustart des Systems und des Scripts helfen auch nichts.
Deshalb dachte ich zuerst, das vlt NTFS nicht mit vielen (>100000) Dateien pro Ordner umgehen kann.
Habe dann ein kleines Testprogramm geschrieben das möglichst schnell Dateien anlegt. Bei diesem sehe ich diesen Effect nicht.
Auch mehr Ram wird nicht belegt, zumindest zeigt der Taskmanager nichts an.
Hier mein Programm das die Probleme macht:
Mein Testprogramm sah so aus:
Irgendwie muss der Fehler mit der Anzahl der Dateien in meinem Ordner zusammenhängen.
Aber ka wie und auch ka wie ich das behebe und auch ka warum mein Testprogramm dann nicht das selbe verhalten zeigt.
Kann mir jamend einen Tipp geben?
habe folgendes Problem:
Habe ein kleines Script mit dem ich per VISA und GPIB Daten von einem Oszi nehme.
Danach schreibe ich diese Daten als einzelne Dateien in einen Ordner.
Problem ist nun, das nach einem Tag die rate mit der ich Daten nehme ca. um einen Faktor 10 bis 100 einbricht.
Der CPU ist statt 3% am ersten Tag zu 100% ausgelastet.
Ein Neustart des Systems und des Scripts helfen auch nichts.
Deshalb dachte ich zuerst, das vlt NTFS nicht mit vielen (>100000) Dateien pro Ordner umgehen kann.
Habe dann ein kleines Testprogramm geschrieben das möglichst schnell Dateien anlegt. Bei diesem sehe ich diesen Effect nicht.
Auch mehr Ram wird nicht belegt, zumindest zeigt der Taskmanager nichts an.
Hier mein Programm das die Probleme macht:
Code: Alles auswählen
import visa
import csv
oszi = visa.instrument("GPIB::7") #get oszi for whole programm
del oszi.timeout
#timeout is removed because we might have reeally low trigger rates.
#if time between triggers is bigger as timeout, we will lose connection to the oszilloscope!
#oszi would need a reboot to recover!
#set oszi to what we need
#but leave other settings unchanged so
#you can still configure by "hand" on the
#frontpanel of oszi
def writecsv(filename, header, data):
with open("directory/%s.csv" % filename, "w") as fobj:
writer = csv.writer(fobj, delimiter=',', lineterminator='\n')
known_types = ["Type:", "Points:", "Count:", "XInc:", "XOrg:", "XRef:", "YData range:", "YData center:", "Coupling:", "XRange:", "XOffset:", "YRange:", "YOffset:", "Date:", "Time:", "Frame:", "Acq mode:", "Completion:", "X Units:", "Y Units:", "Max bandwidth:", "Min bandwidth:"]
#make sure that custom headers will
#be printed after the predefined from oszi
a = set(known_types)
b = set(header.keys())
formatted_header = [["".join([key, (15-len(key)) * " ", str(header[key])])] for key in known_types]
formatted_header.extend([["".join([key, (15-len(key)) * " ", str(header[key])])] for key in b.difference(a)])
writer.writerows(formatted_header)
writer.writerow(["Data:"])
writer.writerows(data)
def create_header(header):
d = dict()
mache etwas umformungen sodas:
d[headername] = headervalue ist
return d
oszi.write("Digitize") #wait for new event
events = 999999999
for j in xrange(1, events):
oszi.write("Digitize")
id = str(j).zfill(9)
print id
#now get data
header = create_header(oszi.ask(":WAVeform:PREamble?").split(","))
y = oszi.ask(":WAVeform:DATA?").split(",")
xorig = float(header["XOrg:"])
xinc = float(header["XInc:"])
data = [["%E" % (float(xorig) + i * float(xinc)), y[i]] for i in xrange(len(y)) ]
#now we have to connvert and save to disk
#maybe store in ram somehow before doing that?
writecsv("Prefixfilename" + id, header, data)
Code: Alles auswählen
for i in xrange(10000000):
with open("speed/%s.csv" % str(i), "w") as fobj:
print i
Aber ka wie und auch ka wie ich das behebe und auch ka warum mein Testprogramm dann nicht das selbe verhalten zeigt.
Kann mir jamend einen Tipp geben?