Time.sleep - спит нить или процесс?

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

Ответ 1

Он блокирует поток. Если вы посмотрите в модулях /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

Ответ 2

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

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

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

Ответ 3

Просто поток.

Ответ 4

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

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

Ответ 5

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

Ответ 6

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