Dies ist ein Treiberskript, das erstellt wurde, um den Fehler meiner Timer-Bibliothek zu messen. Es ist ein Treiber-Tool, mit dem ein bestimmtes Python-Skript unter verschiedenen Bedingungen berechnet werden kann. Ich wusste nicht, wie ich es ausdrücken sollte, aber ich stellte mir "WebDriver" vor und drückte es als Treiber aus. Es ist wie ein Treiberskript zum Ausführen eines Python-Skripts.
python
from timer import Timer
def main():
seconds = 5
interval_set = [0.01,0.025,0.05,0.1,0.15,0.2,0.25,0.5,0.75,1,2,2.5,3,3.5,4,4.5]
num = len(interval_set) + 1
for case in range(1,num):
interval = interval_set[case-1]
timer = Timer(seconds, interval)
timer.test(seconds, interval, case)
if __name__ == '__main__':
main()
Wenn dies ausgeführt wird, wird "test" in "timer.py" für jeden in "interval_set" angegebenen Wert ausgeführt und das Ergebnis aufgezeichnet.
Die erste Hälfte von timer.py
wird nachgedruckt, ist aber wie folgt.
python
import time
import csv
import platform
class Timer:
def __init__(self, seconds, interval):
self.interval = interval
self.seconds = seconds
self.n = int((seconds - (seconds % interval))/interval)
def timer(self, seconds,interval):
time_start = time.perf_counter()
time.sleep(self.interval*self.n)
time_stop = time.perf_counter()
self.remain = seconds - (time_stop - time_start)
if self.remain > 0: #Ich frage mich, ob es hier ist, um Korrekturen hinzuzufügen
time.sleep(self.remain)
else:
pass
self.real = time.perf_counter() - time_start
self.error = self.real - seconds
return False
def test(self,seconds, interval, case):
filename = f"./error_data{case}"+"_"+str(platform.system())+".csv" #Formatiertes String-Literal
with open(filename, 'w') as f: #w ist neu
f.write('seconds(sec),interval(sec),real(sec),error(msec)\n')
f.close()
for i in range(1000): #Einstellung der Messzeiten
while self.timer(seconds, interval):
pass
else:
print('Schleife'+str(case)+' '+str(i+1)+'Zeit'+'interval=' + str(interval) + 'sec Error:'+str(self.error*1000)+'msec')
save_data = [self.seconds,self.interval,self.real, self.error*1000]
with open(filename, 'a', newline='') as f:
writer = csv.writer(f, lineterminator='\r\n')
writer.writerow(save_data)
In diesem Beispiel wird der Fehler etwa 1000 Mal pro 16 Intervallwerte gemessen. Es ist eine ziemliche Wartezeit, also ist es fast wie ein Training, um es einmal auszuführen.
Bei dieser Art von Arbeit kommen Computer ins Spiel.
Das Ergebnis wird in error_data1_Darwin.csv
durch Ausführen von main.py aufgezeichnet.
Ich laufe auf einem Mac, also ist es Darwin. Wenn Sie es mit Raspeye ausführen, ist es Linux.
$ python main.py
Wenn Sie eine große Anzahl von Diagrammen nacheinander anzeigen, wird Ihr Herz gebrochen, sodass das folgende Skript verwendet wird, um sie grafisch darzustellen.
python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
num_figure = 9 #Anzahl der CSV-Dateien, die Sie zeichnen möchten
fig = plt.figure(figsize=(10.0, 15.0))
for i in range(1, num_figure+1):
df = pd.read_csv('./data/error_data{}_Darwin.csv'.format(i)) #CSV-Datei lesen
df_error = df['error(sec)'] #Spalte Fehler lesen
df_param = df['interval(sec)'] #Spalte Intervall lesen
df_sec = df['seconds(sec)'] #Lesen Sie die Spalte Sekunden
ax = fig.add_subplot(5, 2, i) #Es zeichnet in der Reihenfolge mit einer 5-Zeilen-2-Spalten-Anordnung.
sns.distplot(df_error, kde=False, rug=False, bins=100)
# plt.hist(df_error,bins=100, alpha=0.4, histtype='stepfilled', color='g')
ax.set_title("Case{}".format(i)+' ('+str(df_sec[1])+'sec Timer, Int.='+str(df_param[1])+'sec)') #Geben Sie dem Diagramm einen Titel
ax.set_ylim(0,25) #Stellen Sie den Bereich der y-Achse ein
ax.set_xlim(-0.001,0.011) #Stellen Sie den x-Achsenbereich ein
plt.tight_layout() #Passen Sie den Diagrammabstand an
plt.savefig('Error.png')
plt.show()
Das Diagramm wird in kürzester Zeit gezeichnet. Es wird nur durch Ändern der Anordnung des Diagramms neu gedruckt.
Ich wäre Ihnen dankbar, wenn Sie einen Kommentar abgeben könnten, z. B. "Das ist besser."
Recommended Posts