스레드가 시작되지 않은 경우 이 스레드의 `스레드 식별자` 또는 없음입니다. 이것은 영하지 않은 정수입니다. _thread.get_ident() 함수를 참조하십시오. 스레드 식별자는 스레드가 종료되고 다른 스레드가 생성될 때 재활용될 수 있습니다. 식별자는 스레드가 종료된 후에도 사용할 수 있습니다. 예를 들어 클라이언트와 서버 스레드를 동기화하는 간단한 방법은 다음과 같습니다. 이렇게 하면 join() 메서드가 호출되는 스레드가 일반적으로 또는 처리되지 않은 예외를 통해 종료될 때까지 또는 선택적 시간 시간이 발생할 때까지 호출 스레드를 차단합니다. 실행하는 데 걸린 시간은 약 1초입니다. 모든 스레드는 1초가 걸리고 스레드 기반 병렬 처리를 사용했기 때문에 코드를 실행하는 데 걸리는 총 시간은 1초에 가깝습니다.

각 스레드 프로그램을 만든 후 join 메서드를 사용하는 경우 10초 이상 소요됩니다. 지금까지 스레딩, 큐 및 시간을 가져왔습니다. 스레딩은, 잘, 스레딩, 큐는 우리가 만드는 데 도움이 될 것입니다, 당신은 그것을 짐작, 큐입니다! 마지막으로, 우리는 시간을 가져옵니다. 여기에 시간을 가져오는 유일한 이유는 time.sleep() 함수를 사용하여 유휴 시간을 시뮬레이션하는 것입니다. 이벤트부터 시작해 봅시다. 스레딩입니다. 이벤트 개체를 사용하면 한 스레드가 이벤트를 신호할 수 있으며 다른 많은 스레드가 해당 이벤트가 발생할 때까지 기다릴 수 있습니다. 이 코드의 주요 용도는 이벤트를 기다리는 스레드가 수행 중인 작업을 중지할 필요는 없으며 가끔씩 이벤트의 상태를 확인할 수 있다는 것입니다. 위의 그림은 빈 목록을 보여 주지만 목록은 값 1과 6으로 채워질 것으로 예상됩니다. 문 인쇄 (“List1는 : “, list1)는 주 스레드에 의해 실행되고 주 스레드는 목록을 채우기 전에 목록을 인쇄합니다. 재진입 잠금은 동일한 스레드에서 여러 번 획득할 수 있는 동기화 기본 장치입니다.

내부적으로는 기본 잠금에서 사용되는 잠금/잠금 해제 상태 외에 “스레드 소유” 및 “재귀 수준”의 개념을 사용합니다. 잠긴 상태에서 일부 스레드는 잠금을 소유합니다. 잠금 해제된 상태에서는 스레드가 이를 소유하지 않습니다. 이 메서드는 run() 메서드가 종료된 직후까지 run() 메서드가 시작되기 직전에 True를 반환합니다. 모듈 함수는 모든 살아 있는 스레드 목록을 반환합니다. 잠금 및 RLock은 경합 조건을 방지하기 위해 스레드 프로그래밍에 사용되는 두 가지 기본 도구입니다. 다른 방법으로 작동하는 몇 가지 다른 방법이 있습니다. 그들을 보기 전에 약간 다른 문제 도메인으로 이동 해 보겠습니다. 계속하기 전에 Locks를 사용할 때 일반적인 문제를 확인해야 합니다. 보시다시피 Lock이 이미 인수된 경우 .acquire()에 대한 두 번째 호출은 Lock을 보유하는 스레드가 .release()를 호출할 때까지 기다립니다. 이 코드를 실행할 때 어떤 일이 발생한다고 생각하십니까: 깨어난 스레드는 잠금을 다시 획득할 수 있을 때까지 wait() 호출에서 실제로 반환되지 않습니다.

notify()는 잠금을 해제하지 않으므로 호출자는 잠금을 해제해야 합니다. 주 프로세스를 종료하기 전에 완료되었는지 확인하기 위해 모든 데몬 스레드에 명시적 핸들을 유지할 필요는 없습니다. enumerate())는 활성 스레드 인스턴스 목록을 반환합니다. 목록에는 현재 스레드가 포함되어 있으며 현재 스레드를 조인할 수 없으므로 교착 상태 상황이 발생하므로 건너뛸 수 있습니다. 여기에 답이 있습니다. 소비자가 .producer_lock.release()를 호출하는 즉시 교체할 수 있으며 생산자는 실행을 시작할 수 있습니다. .release()가 반환되기 전에 발생할 수 있습니다! 즉, 함수가 self.message를 반환할 때 실제로 생성된 다음 메시지가 될 수 있으므로 첫 번째 메시지가 손실될 가능성이 있습니다.

Scroll Up