Stavo giocando con la funzione time.sleep dalla libreria standard di python e l'ho trovata inadeguata per i ritardi sub-ms. Dal test ho trovato in realtà attendere 1.1-1.2 ms per un attesa di 1 ms. L'implementazione di un'attesa impegnata ha ottenuto una precisione dell'ordine dell'1%. Ho usato:Python time.sleep vs busy wait accuracy
def busy_wait(dt):
current_time = time.time()
while (time.time() < current_time+dt):
pass
e potrebbe arrivare a 0,0001 secondi prima di rompere l'1% di precisione.
Le domande principali che ho sono:
- Perché la funzione di sonno in modo inesatto (forse un problema di C)? Cambiare la CPU con una velocità di clock più alta?
- Perché qualcuno dovrebbe usare il sonno? L'unico vantaggio che vedo, risparmio energetico, è limitato ai sistemi embedded, no?
- Sarebbe utile compensare l'inaccuratezza del sonno con la calibrazione? In questo modo:
def sleep(dt): sleep(calibration_function(dt))
Per inciso, ho letto che il sonno non ha nemmeno funziona bene con i lunghi tempi di attesa: Upper limit in Python time.sleep()? Ho anche letto da qualche parte su SO di fare un ciclo di intervalli di tempo più brevi per aumentare la precisione , ma è inutile quando voglio ritardare 0,01 sec. Karl Voigtland menziona l'uso del nanosleep del tipo, ma ritengo che questo sia eccessivo e che time.sleep dovrebbe fare il suo comportamento previsto.
time.sleep è una funzionalità di python non funzionante? O a nessuno interessa abbastanza la misurazione del tempo?
possibile duplicato di [Quanto è accurato python's time.sleep()?] (Http://stackoverflow.com/questions/1133857/how-accurate-is-pythons-time-sleep) – g19fanatic
Sì, ho pensato che fosse un Chiamata al sistema operativo, ma ora mi chiedo perché usano una chiamata del sistema operativo quando un'attesa è meglio. – JDong
un'attesa impegnata fa schifo il tempo della CPU e blocca una CPU. Un sonno esegue un cambio di contesto e non blocca altre esecuzioni (blocca l'esecuzione). In generale, sei solo occupato ad aspettare se hai davvero bisogno del tempo esatto, e anche allora sei ancora limitato al bisogno del SO per CPU che potrebbe contestualizzarti comunque ... – g19fanatic