Il s'agit d'un script de pilote créé pour mesurer l'erreur de ma bibliothèque Timer.
C'est un outil pilote pour faire calculer un certain script python
dans différentes conditions. Je ne savais pas comment l'exprimer, mais j'ai imaginé «WebDriver» et je l'ai exprimé comme un pilote.
C'est comme un script de pilote pour piloter un script Python
.
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()
Quand ceci est exécuté, test
dans timer.py
est exécuté pour chaque valeur spécifiée dans ʻinterval_set` et le résultat est enregistré.
La première moitié de «timer.py» est réimprimée, mais c'est comme suit.
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: #Si vous ajoutez une correction, c'est ici
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" #Chaîne littérale formatée
with open(filename, 'w') as f: #w est nouveau
f.write('seconds(sec),interval(sec),real(sec),error(msec)\n')
f.close()
for i in range(1000): #Réglage des temps de mesure
while self.timer(seconds, interval):
pass
else:
print('boucle'+str(case)+' '+str(i+1)+'Temps'+'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)
Dans cet exemple, l'erreur est mesurée environ 1000 fois toutes les 16 valeurs d'intervalle. C'est assez long, c'est donc presque comme s'entraîner pour l'exécuter une fois.
C'est dans ce genre de travail que les ordinateurs entrent en jeu.
En exécutant main.py, le résultat sera enregistré dans ʻerror_data1_Darwin.csv`. Je tourne sur un Mac, donc c'est Darwin. Si vous l'exécutez avec Raspeye, ce sera Linux.
$ python main.py
Si vous affichez un grand nombre de graphiques un par un, votre cœur sera brisé, le script suivant est donc utilisé pour les représenter.
python
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
num_figure = 9 #Nombre de fichiers csv que vous souhaitez dessiner
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)) #Lire le fichier csv
df_error = df['error(sec)'] #Lire la colonne Erreur
df_param = df['interval(sec)'] #Lire la colonne Intervalle
df_sec = df['seconds(sec)'] #Lire la colonne Secondes
ax = fig.add_subplot(5, 2, i) #Il dessine dans l'ordre avec un arrangement de 5 lignes 2 colonnes.
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)') #Donnez un titre au graphique
ax.set_ylim(0,25) #Définir la plage de l'axe y
ax.set_xlim(-0.001,0.011) #Définir la plage de l'axe x
plt.tight_layout() #Ajuster l'espacement du graphique
plt.savefig('Error.png')
plt.show()
Le graphique sera dessiné en un rien de temps. Il sera réimprimé simplement en modifiant la disposition du graphique.
Je vous serais reconnaissant si vous pouviez commenter, comme "C'est mieux".