Вопрос

В 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 по сну это не указано, так что я, конечно, могу понять путаницу!

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

Просто нить.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top