В Python для * nix, time.sleep()
блокировать поток или процесс?time.sleep - спит нить или процесс?
ответ
Он блокирует нить. Если вы посмотрите в модулях/timemodule.c в источнике Python, вы увидите, что в вызове floatsleep()
основная часть операции сна заверяется в блок Py_BEGIN_ALLOW_THREADS и Py_END_ALLOW_THREADS, позволяя другим потокам продолжать выполнение, в то время как текущий спит. Вы также можете проверить это с помощью простой программы питона:
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
Только нить.
Он будет просто спать в потоке, за исключением случаев, когда ваше приложение имеет только один поток, и в этом случае он будет спать в потоке и эффективно выполнять этот процесс.
Документация на python во сне не указывает это, однако, я могу, конечно, понять путаницу!
@MichaelMrozek: [`sleep (3)` говорит: * "sleep() заставляет сбой вызывающего потока до тех пор, пока не истечет секунды секунд или не поступит сигнал , который не игнорируется." *] (Http: // man7. org/linux/man-pages/man3/sleep.3.html) И [есть ошибка документации Python] (http://bugs.python.org/issue23251). – jfs 2015-01-17 04:02:35
Нить будет блокировать, но процесс все еще жив.
В однопоточном приложении это означает, что во время сна вы заблокированы. В многопоточном приложении только поток, который вы явно «спящий», блокируется, а остальные потоки все еще выполняются внутри процесса.
только нить, если ваш процесс не имеет ни одного потока.
Процесс не запускается сам по себе. Что касается исполнения, процесс - это просто контейнер для потоков. Это означает, что вы не можете приостановить процесс вообще. Это просто неприменимо к процессу.
Как проиллюстрировать «поток» заблокирован. И почему не печатаются не только 5 и 103, а все остальные цифры печатаются. Было бы очень полезно для меня, если бы кто-нибудь мог объяснить. – akki 2017-08-01 01:26:11
@akki: задайте новый вопрос, а не используйте комментарии по старому вопросу. Кроме того, 5 печатаются (это прямо перед 101). – 2017-08-01 02:32:28