Ich betreibe einen HTTP-Server (hausgemacht, in C++), der einen Python-Interpreter für Server-Side-Scripting einbettet. Dies ist ein Forking-Server, aber ich verwende kein Threading in einem übergeordneten Prozess. Ich mache keine seltsamen Dinge mit dem Python-Interpreter (außer den Gabeln).Python time.sleep dauert viel länger
In einem der Skripte, jedoch in einem anderen Thread, kann ein Anruf an time.sleep(0.1)
bis zu einer Minute dauern, vor allem der erste Anruf.
while not self.should_stop():
# other code
print "[PYTHON]: Sleeping"
time.sleep(0.1)
print "[PYTHON]: Slept, checking should_stop"
Ich weiß, dass dies ist, wo es hängt, weil die Protokolle nur den ersten Druck zeigen, und der zweite viel, viel später.
Zusätzliche Informationen:
- die CPU nicht gebunden sind (~ 5%)
- dieses Python 2.7 auf Ubuntu
- Dies sind
threading
Fäden; Ich benutze Schlösser und Ereignisse wo nötig. - Ich importiere keinen
threading
in irgendeinem Prozess, der jemals eine Verzweigung machen wird - Python wird vor den Gabeln initialisiert; dies funktioniert anderswo groß (keine Probleme in den letzten 6 Monaten)
Hallo! Sorry, aber kannst du eine Quelle angeben, ich habe noch nie so etwas gehört. Vielen Dank! Edit: Außerdem gibt es nur 2 Threads, warum würde einer von ihnen hängen? –
Eine Stunde des Wartens auf eine halbe Sekunde Schlaf wäre ein katastrophaler Fadenplanungsmangel, sogar mit der globalen Interpretersperre. – user2357112
@ user2357112, ich dachte, es sollte ziemlich offensichtlich sein, dass es eine Übertreibung ist, zu zeigen, dass die 'Verzögerung' ziemlich auffällig sein kann. – ForceBru