Ist in Python für *nix time.sleep()
den Thread oder den Prozess blockieren?
Antworten
Zu viele Anzeigen?Sie blockiert den Faden. Wenn Sie in Modules/timemodule.c im Python-Quelltext nachsehen, werden Sie sehen, dass der Aufruf von floatsleep()
wird der substantielle Teil der Sleep-Operation in einen Py_BEGIN_ALLOW_THREADS- und Py_END_ALLOW_THREADS-Block verpackt, so dass andere Threads weiter ausgeführt werden können, während der aktuelle 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()
Das wird gedruckt:
>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
Es wird nur der Thread schlafen, es sei denn, Ihre Anwendung hat nur einen einzigen Thread, in diesem Fall wird der Thread und damit auch der Prozess schlafen.
Die Python-Dokumentation zu sleep()
wird dies jedoch nicht angegeben, so dass ich die Verwirrung durchaus verstehen kann!
Der Thread wird blockiert, aber der Prozess ist noch aktiv.
In einer Single-Thread-Anwendung bedeutet dies, dass alles blockiert wird, während Sie schlafen. In einer Multithread-Anwendung wird nur der Thread, den Sie explizit "schlafen", blockiert, während die anderen Threads innerhalb des Prozesses weiterlaufen.
- See previous answers
- Weitere Antworten anzeigen