Ich spielte mit der time.sleep-Funktion aus Python-Standard-Bibliothek und fand es nicht ausreichend für Sub-ms-Verzögerungen. Beim Testen habe ich festgestellt, dass es tatsächlich 1.1-1.2 ms für eine Wartezeit von 1 ms wartet. Die Implementierung einer hektischen Wartezeit hat die Genauigkeit auf 1% gebracht. Ich benutzte:Python time.sleep vs beschäftigt warten Genauigkeit
und konnte bis zu 0,0001 Sekunden vor 1% Genauigkeit brechen.
Die wichtigsten Fragen, die ich habe, sind:
- Warum ist die Schlaffunktion so ungenau (möglicherweise eine C Ausgabe)? Ändert das eine bessere CPU mit einer höheren Taktfrequenz?
- Warum sollte jemand schlafen? Der einzige Vorteil, den ich sehe, Energieeinsparung, ist auf eingebettete Systeme beschränkt, nein?
- Wäre es möglich, die Ungenauigkeit des Schlafs durch Kalibrierung zu kompensieren? Wie so:
def sleep(dt): sleep(calibration_function(dt))
Als Nebenwirkung, las ich, dass der Schlaf nicht einmal gut mit langen Wartezeiten funktioniert: Upper limit in Python time.sleep()? ich auch irgendwo auf las SO von einer Schleife von kürzeren Zeitabständen machen Präzision zu erhöhen , aber das ist nutzlos, wenn ich 0,01 Sek. verzögern möchte. Karl Voigtland erwähnt mit ctypes 'nanoschlaf, aber ich denke, das ist übertrieben und diese time.sleep sollte ihr beabsichtigtes Verhalten tun.
time.sleep ist eine defekte Python-Funktion? Oder kümmert es niemanden um genaue Zeitmessung genug?
mögliche Duplikate von [Wie genau ist python time.sleep()?] (Http://stackoverflow.com/questions/1133857/how-accurate-is-pythons-time-sleep) – g19fanatic
Ja, ich dachte, es war ein OS-Anruf, aber jetzt wundere ich mich, warum sie einen OS-Anruf verwenden, wenn ein beschäftigtes Warten besser ist. – JDong
eine hektische Wartezeit saugt CPU-Zeit und blockiert eine CPU. Ein Sleep führt einen Kontextwechsel aus und blockiert keine andere Ausführung (es "blockiert" Ihre Ausführung). Im Allgemeinen warten Sie nur, wenn Sie wirklich das genaue Timing brauchen, und selbst dann sind Sie immer noch auf den Betriebssystembedarf für CPU beschränkt, der Sie möglicherweise wegführen könnte ... – g19fanatic