425 Stimmen

time.sleep -- schläft Thread oder Prozess?

Ist in Python für *nix time.sleep() den Thread oder den Prozess blockieren?

426voto

Nick Bastin Punkte 28870

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

68voto

Zach Burlingame Punkte 13286

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!

41voto

finnw Punkte 46519

Nur der Faden.

20voto

Corey Goldberg Punkte 56036

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.

5voto

Ali Abbasinasab Punkte 372

Nur der Thread, es sei denn, Ihr Prozess hat einen einzigen Thread.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X