time.sleep - спит поток или процесс? - PullRequest
325 голосов
/ 18 сентября 2008

В Python для * nix time.sleep() блокирует поток или процесс?

Ответы [ 6 ]

304 голосов
/ 18 сентября 2008

Блокирует поток. Если вы заглянете в Modules / timemodule.c в исходном коде Python, то увидите, что при вызове floatsleep() основная часть операции сна заключена в блоки Py_BEGIN_ALLOW_THREADS и Py_END_ALLOW_THREADS, что позволяет другим потокам продолжать выполнение пока текущий спит. Вы также можете проверить это с помощью простой программы на Python:

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

Который напечатает:

>>> thread_test.run()
0
100
>>> 1
2
3
4
5
101
6
7
8
9
10
102
47 голосов
/ 18 сентября 2008

Это будет просто спящий поток, за исключением случая, когда ваше приложение имеет только один поток, и в этом случае это будет спящий поток и эффективный процесс.

Однако в документации по сну на python это не указано, поэтому я, конечно, могу понять путаницу!

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

27 голосов
/ 18 сентября 2008

Просто нить.

9 голосов
/ 18 сентября 2008

Поток заблокируется, но процесс все еще жив.

В однопоточном приложении это означает, что все заблокировано во время сна. В многопоточном приложении блокируется только тот поток, который вы явно «спите», а остальные потоки по-прежнему работают в этом процессе.

2 голосов
/ 29 октября 2016

Процесс не запускается сам по себе. Что касается выполнения, процесс - это просто контейнер для потоков. Это означает, что вы не можете приостановить процесс вообще. Это просто не применимо к процессу.

2 голосов
/ 26 августа 2015

Только поток, если у вашего процесса нет одного потока.

...