В Python для * nix, time.sleep()
блокирует поток или процесс?
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 во сне не указывает этого, поэтому я могу, конечно, понять путаницу!
Ответ 3
Просто поток.
Ответ 4
Поток будет блокироваться, но процесс все еще жив.
В однопоточном приложении это означает, что во время сна вы заблокированы. В многопоточном приложении только поток, который вы явно "спящий" блокирует, а остальные потоки все еще выполняются в процессе.
Ответ 5
Только поток, если только ваш процесс не имеет нити.
Ответ 6
Процесс не запускается сам по себе. Что касается исполнения, процесс - это просто контейнер для потоков. Это означает, что вы не можете приостановить процесс вообще. Это просто неприменимо для процесса.