문제

*nix용 Python에서는 다음을 수행합니다. time.sleep() 스레드나 프로세스를 차단하시겠습니까?

도움이 되었습니까?

해결책

스레드를 차단합니다.Python 소스에서 Modules/timemodule.c를 보면 다음 호출에서 이를 볼 수 있습니다. 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

다른 팁

응용 프로그램에 단일 스레드만 있는 경우를 제외하고는 스레드만 잠자기 상태가 됩니다. 이 경우 스레드는 물론 프로세스도 효과적으로 잠자기 상태가 됩니다.

그러나 sleep에 대한 Python 문서에서는 이를 지정하지 않으므로 혼란을 확실히 이해할 수 있습니다!

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

그냥 스레드입니다.

스레드는 차단되지만 프로세스는 여전히 살아 있습니다.

단일 스레드 애플리케이션에서는 잠자는 동안 모든 것이 차단된다는 의미입니다.다중 스레드 응용 프로그램에서는 명시적으로 '휴면'한 스레드만 차단되고 다른 스레드는 계속 프로세스 내에서 실행됩니다.

프로세스에 단일 스레드가 없으면 스레드만 사용합니다.

프로세스는 자체적으로 실행될 수 없습니다.실행과 관련하여 프로세스는 스레드의 컨테이너일 뿐입니다.즉, 프로세스를 전혀 일시 중지할 수 없습니다.단순히 프로세스에 적용할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top