Frage

In Python für *nix ist dies der Fall time.sleep() Den Thread oder den Prozess blockieren?

War es hilfreich?

Lösung

das Gewinde Es blockiert. Wenn Sie in Module / timemodule.c in der Quelle Python anschauen, werden Sie, dass in der Ausschreibung floatsleep(), der materiellen Teil der Sleep-Funktion ist in einem Py_BEGIN_ALLOW_THREADS und Py_END_ALLOW_THREADS Block gewickelt, so dass andere Threads fortzusetzen, während das auszuführen Strom schläft. Sie können diesen Test auch mit einem einfachen Python-Programm:

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()

Welche druckt:

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

Andere Tipps

Der Thread wird nur in den Ruhezustand versetzt, es sei denn, Ihre Anwendung verfügt nur über einen einzelnen Thread. In diesem Fall wird der Thread und praktisch auch der Prozess in den Ruhezustand versetzt.

In der Python-Dokumentation zu Sleep wird dies jedoch nicht spezifiziert, daher kann ich die Verwirrung durchaus verstehen!

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

Nur der Faden.

Der Thread wird blockiert, aber der Prozess ist noch am Leben.

In einer Single-Threaded-Anwendung bedeutet dies alles blockiert ist, während Sie schlafen. In einer Multi-Thread-Anwendung, nur der Thread explizit ‚Schlaf‘ blockiert und die anderen Threads immer noch innerhalb des Prozesses ausgeführt werden.

Nur der Faden, wenn Ihr Prozess einen einzigen Thread hat.

Der Prozess ist nicht von selbst ablauffähig. In Bezug auf die Ausführung, Prozess ist nur ein Behälter für Threads. Das heißt, Sie den Prozess überhaupt nicht anhalten kann. Es ist einfach nicht anwendbar zu verarbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top