время.сон-спит нить или процесс?



в Python для *nix, делает time.sleep() блокировать поток или процесс?

626   6  

6 ответов:

он блокирует поток. Если вы посмотрите в модулях / 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

просто нить.

поток будет блокировать, но процесс все еще жив.

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

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

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

Comments

    Ничего не найдено.