time.sleep()
Blockiert in Python für * nix der Thread oder der Prozess?
time.sleep()
Blockiert in Python für * nix der Thread oder der Prozess?
Antworten:
Es blockiert den Thread. Wenn Sie in der Python-Quelle in Modules / timemodule.c nachsehen, werden Sie feststellen, dass beim Aufruf von floatsleep()
der wesentliche Teil der Schlafoperation in einen Py_BEGIN_ALLOW_THREADS- und Py_END_ALLOW_THREADS-Block eingeschlossen ist, sodass andere Threads während der aktuellen Ausführung fortgesetzt werden können man schläft Sie können dies auch mit einem einfachen Python-Programm testen:
import time
from threading import Thread
class worker(Thread):
def run(self):
for x in xrange(0,11):
print x
time.sleep(1)
class waiter(Thread):
def run(self):
for x in xrange(100,103):
print x
time.sleep(5)
def run():
worker().start()
waiter().start()
Welches wird gedruckt:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
Der Thread wird nur in den Ruhezustand versetzt, außer in dem Fall, in dem Ihre Anwendung nur einen einzigen Thread hat. In diesem Fall wird der Thread und auch der Prozess in den Ruhezustand versetzt.
In der Python-Dokumentation zum Thema Schlaf wird dies jedoch nicht angegeben, sodass ich die Verwirrung durchaus verstehen kann!
Der Thread wird blockiert, aber der Prozess läuft noch.
In einer einzelnen Thread-Anwendung bedeutet dies, dass im Schlaf alles blockiert ist. In einer Multithread-Anwendung wird nur der Thread blockiert, den Sie explizit "schlafen", und die anderen Threads werden weiterhin im Prozess ausgeführt.
Der Prozess kann nicht von selbst ausgeführt werden. In Bezug auf die Ausführung ist der Prozess nur ein Container für Threads. Das heißt, Sie können den Vorgang überhaupt nicht anhalten. Es ist einfach nicht auf den Prozess anwendbar.
sleep
Befehl anhalten wird.
Es blockiert einen Thread, wenn er im selben Thread ausgeführt wird, nicht, wenn er vom Hauptcode ausgeführt wird