Ich kann ihm Gleitkommazahlen geben, wie z
time.sleep(0.5)
aber wie genau ist es? Wenn ich es gebe
time.sleep(0.05)
Wird es wirklich etwa 50 ms schlafen?
Die Genauigkeit der time.sleep-Funktion hängt von der Schlafgenauigkeit Ihres zugrunde liegenden Betriebssystems ab. Für Nicht-Echtzeit-Betriebssysteme wie Standard-Windows beträgt das kleinste Intervall, in dem Sie schlafen können, etwa 10-13 ms. Ich habe innerhalb einiger Millisekunden nach dieser Zeit einen genauen Schlaf gesehen, wenn er über dem Minimum von 10-13 ms lag.
Update: Wie in den unten genannten Dokumenten erwähnt, ist es üblich, den Schlaf in einer Schleife durchzuführen, die sicherstellt, dass Sie wieder einschlafen, wenn Sie früh aufgeweckt werden.
Ich sollte auch erwähnen, dass Sie unter Ubuntu einen Pseudo-Echtzeit-Kernel (mit dem RT_PREEMPT-Patch-Set) ausprobieren können, indem Sie das RT-Kernel-Paket installieren (zumindest in Ubuntu 10.04 LTS).
BEARBEITEN: Korrektur Nicht-Echtzeit-Linux-Kernel haben ein Mindestschlafintervall, das viel näher bei 1 ms als 10 ms liegt, aber nicht deterministisch variiert.
sleep()
aus den Dokumenten zu tun andere Aktivität im System ".Die Leute haben völlig Recht mit den Unterschieden zwischen Betriebssystemen und Kerneln, aber ich sehe keine Granularität in Ubuntu und ich sehe eine Granularität von 1 ms in MS7. Schlagen Sie eine andere Implementierung von time.sleep vor, nicht nur eine andere Tickrate. Eine genauere Betrachtung deutet übrigens auf eine Granularität von 1 μs in Ubuntu hin, aber das liegt an der time.time-Funktion, die ich zum Messen der Genauigkeit verwende.
quelle
Aus der Dokumentation :
Und insbesondere bzgl
sleep()
:quelle
Hier ist meine Fortsetzung von Wilberts Antwort: Dasselbe gilt für Mac OS X Yosemite, da es noch nicht viel erwähnt wurde.
Es sieht so aus, als würde es die meiste Zeit ungefähr das 1,25-fache der von Ihnen angeforderten Zeit und manchmal das 1- bis 1,25-fache der von Ihnen angeforderten Zeit schlafen. Es schläft fast nie (~ zweimal von 1000 Proben) deutlich mehr als das 1,25-fache der von Ihnen gewünschten Zeit.
Auch (nicht explizit gezeigt) scheint die 1,25-Beziehung ziemlich gut zu halten, bis Sie unter etwa 0,2 ms kommen, wonach es anfängt, ein wenig unscharf zu werden. Darüber hinaus scheint sich die tatsächliche Zeit auf etwa 5 ms länger einzustellen, als Sie anfordern, nachdem die angeforderte Zeit über 20 ms liegt.
Auch hier scheint es sich um eine völlig andere Implementierung von
sleep()
OS X zu handeln als unter Windows oder dem Linux-Kern, den Wilbert verwendet hat.quelle
Warum findest du es nicht heraus:
Für die Aufzeichnung erhalte ich ungefähr 0,1 ms Fehler auf meinem HTPC und 2 ms auf meinem Laptop, beide Linux-Maschinen.
quelle
Eine kleine Korrektur, mehrere Leute erwähnen, dass der Schlaf durch ein Signal vorzeitig beendet werden kann. In den 3.6-Dokumenten heißt es:
quelle
Sie können nicht wirklich etwas über Schlaf garantieren (), außer dass es zumindest die beste Anstrengung macht, zu schlafen, solange Sie es gesagt haben (Signale können Ihren Schlaf töten, bevor die Zeit abgelaufen ist, und viele andere Dinge können ihn zum Laufen bringen lange).
Sicherlich beträgt das Minimum, das Sie auf einem Standard-Desktop-Betriebssystem erreichen können, etwa 16 ms (Timer-Granularität plus Zeit bis zum Kontextwechsel), aber es besteht die Möglichkeit, dass die prozentuale Abweichung vom angegebenen Argument beim Versuch erheblich ist für 10s Millisekunden schlafen.
Signale, andere Threads, die die GIL enthalten, Spaß beim Planen des Kernels, Steigern der Prozessorgeschwindigkeit usw. können mit der Dauer, in der Ihr Thread / Prozess tatsächlich schläft, Chaos anrichten.
quelle
Wenn Sie mehr Präzision oder kürzere Schlafzeiten benötigen, sollten Sie Ihre eigenen erstellen:
quelle
Dies wurde kürzlich unter Python 3.7 unter Windows 10 getestet. Die Genauigkeit betrug ca. 1 ms.
quelle
Verwenden Sie keine Variable, um das Argument sleep () zu übergeben. Sie müssen die Berechnung direkt in sleep () einfügen.
Und die Rückkehr meines Terminals
1 ───── 17: 20: 16.891 ─────────────────────
2 ───── 17: 20: 18.891 ─────────────────────
3 ───── 17: 20: 20.891 ─────────────────────
4 ───── 17: 20: 22.891 ─────────────────────
5 ───── 17: 20: 24.891 ─────────────────────
....
689 ─── 17: 43: 12.891 ──────────────────────
690 ─── 17: 43: 14.890 ──────────────────────
691 ─── 17: 43: 16.891 ──────────────────────
692 ─── 17: 43: 18.890 ──────────────────────
693 ─── 17: 43: 20.891 ──────────────────────
...
727 ─── 17: 44: 28.891 ──────────────────────
728 ─── 17: 44: 30.891 ──────────────────────
729 ─── 17: 44: 32.891 ──────────────────────
730 ─── 17: 44: 34.890 ──────────────────────
731 ─── 17: 44: 36.891 ──────────────────────
quelle