В 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
Нить будет блокировать, но процесс все еще жив.
В однопоточном приложении это означает, что во время сна вы заблокированы. В многопоточном приложении только поток, который вы явно «спящий», блокируется, а остальные потоки все еще выполняются внутри процесса.
только нить, если ваш процесс не имеет ни одного потока.
Процесс не запускается сам по себе. Что касается исполнения, процесс - это просто контейнер для потоков. Это означает, что вы не можете приостановить процесс вообще. Это просто неприменимо к процессу.
- 1. Нить не спит?
- 2. Python time.sleep процесс блокировки
- 3. Выполнение как процесс или нить
- 4. Java нить спит много больше, чем указано
- 5. Связана ли нить или процесс сельдерея apply_async?
- 6. Процесс или нить изменились с последнего шага
- 7. Нужен фоновый процесс. Нить?
- 8. Загрузить процесс как нить?
- 9. Когда процесс или поток блокируются, неустанно ли он ждет уведомления или просто спит какое-то время?
- 10. CSR разделяемой памяти, нить, процесс
- 11. Créate изолированная нить как процесс
- 12. Как лучше распорядиться нить, которая спит из-за AutoResetEvent.WaitOne()
- 13. Java нить периодически убивает процесс
- 14. Python time.sleep() зависает
- 15. Python: взаимозависимые очереди процесс/нить
- 16. Может ли нить отслеживать процесс?
- 17. time.sleep() function
- 18. Что произойдет, если поток сбой, который лучше нить или процесс?
- 19. Процесс или нить изменились с последнего шага (Visual Studio)
- 20. как выяснить, почему процесс спит/заблокирован в Linux
- 21. Как убить процесс в Unix, который часто спит?
- 22. Избегайте нить приостанавливать или убивать
- 23. time.sleep висит
- 24. Использование Python 3 time.sleep в Raspberry Pi 3 зависает процесс
- 25. Процесс продолжается, когда основная нить прекратилась?
- 26. Scala Процесс завершается, но не очищает нить
- 27. Выходит ли процесс, когда заканчивается основная нить?
- 28. Может ли нить изменить свой процесс принадлежности?
- 29. Python - это time.sleep (n) интенсивный процессор?
- 30. Python time.sleep
Как проиллюстрировать «поток» заблокирован. И почему не печатаются не только 5 и 103, а все остальные цифры печатаются. Было бы очень полезно для меня, если бы кто-нибудь мог объяснить. – akki 2017-08-01 01:26:11
@akki: задайте новый вопрос, а не используйте комментарии по старому вопросу. Кроме того, 5 печатаются (это прямо перед 101). – 2017-08-01 02:32:28