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