web-dev-qa-db-de.com

time.sleep - schläft Thread oder Prozess?

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

338
Jeremy Dunck

Es blockiert den Thread. Wenn Sie in Modules/timemodule.c in der Quelle Python=) nachsehen, werden Sie feststellen, dass im Aufruf von floatsleep() der wesentliche Teil der Schlafoperation eingeschlossen ist einen Py_BEGIN_ALLOW_THREADS- und einen Py_END_ALLOW_THREADS-Block, mit denen andere Threads weiter ausgeführt werden können, während sich der aktuelle im Ruhezustand befindet. 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 drucken:

>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
315
Nick Bastin

Der Thread wird nur inaktiviert, es sei denn, Ihre Anwendung verfügt nur über einen einzigen Thread. In diesem Fall wird der Thread und damit auch der Prozess inaktiviert.

Die python Dokumentation zum Schlaf spezifiziert dies jedoch nicht, so dass ich die Verwirrung sicherlich verstehen kann!

http://docs.python.org/2/library/time.html

49
Zach Burlingame

Nur der Faden.

28
finnw

Der Thread wird blockiert, aber der Prozess ist noch aktiv.

In einer Anwendung mit einem Thread 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 innerhalb des Prozesses ausgeführt.

10
Corey Goldberg

Nur der Thread, es sei denn, Ihr Prozess verfügt über einen einzelnen Thread.

2
Ali Abbasinasab

Der Prozess kann nicht alleine ausgeführt werden. In Bezug auf die Ausführung ist process nur ein Container für Threads. Das heißt, Sie können den Vorgang überhaupt nicht unterbrechen. Es ist einfach nicht anwendbar, um zu verarbeiten.

1