programing

time.sleep --슬립 스레드 또는 프로세스?

nicescript 2023. 1. 3. 22:09
반응형

time.sleep --슬립 스레드 또는 프로세스?

*nix용 Python에서는 다음과 같습니다.time.sleep()스레드 또는 프로세스를 차단합니까?

그것은 실을 막는다.Python 소스의 Modules/timemodule.c를 참조하면 다음 호출에서 확인할 수 있습니다.floatsleep()sleep 동작의 본질적인 부분은 Py_BEGIN_ALLOW_THREADS 블록과 Py_END_ALLOW_THREADS 블록으로 둘러싸여 있기 때문에 현재 스레드가 sleep 상태일 때 다른 스레드를 계속 실행할 수 있습니다.간단한 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

어플리케이션에 스레드가1개밖에 없는 경우는 제외하고 스레드만 sleeve 합니다.이 경우 스레드는 sleeve 상태가 되어 프로세스도 효율적으로 sleeve 상태가 됩니다.

하지만 의 python 문서에는 명시되어 있지 않기 때문에 혼란스러운 점은 확실히 이해할 수 있습니다!

실타래만.

스레드는 차단되지만 프로세스는 아직 활성 상태입니다.

단일 스레드 어플리케이션에서는 sleeve 중에 모든 것이 차단됩니다.멀티스레드 응용 프로그램에서는 사용자가 명시적으로 'sleep'한 스레드만 차단되고 다른 스레드는 프로세스 내에서 계속 실행됩니다.

프로세스에 단일 스레드가 없는 한 스레드만 해당됩니다.

프로세스 자체로는 실행할 수 없습니다.실행과 관련하여 프로세스는 스레드의 컨테이너에 불과합니다.즉, 프로세스를 전혀 중단할 수 없습니다.그것은 단순히 프로세스에 적용되지 않는다.

같은 스레드에서 실행되는 스레드는 메인 코드에서 실행되는 스레드가 아니라 차단됩니다.

언급URL : https://stackoverflow.com/questions/92928/time-sleep-sleeps-thread-or-process

반응형