파이썬 쓰레드 예제

  • 0

파이썬 쓰레드 예제

여러 스레드를 사용하는 요점은 동시에 실행되도록 별도의 작업을 스핀 오프하는 것이지만 두 개 이상의 스레드에서 작업을 동기화할 수 있어야 하는 경우가 있습니다. 스레드 간에 통신하는 간단한 방법은 Event 개체를 사용하는 것입니다. 이벤트는 호출자가 설정()() 또는 clear()할 수 있는 내부 플래그를 관리합니다. 다른 스레드는 플래그가 설정될 때까지() 대기할 수 있으며 계속할 때까지 진행률을 효과적으로 차단할 수 있습니다. 각 스레드가 .update()를 실행하고 .update()가 .value에 하나를 추가하므로 마지막에 인쇄될 때 database.value가 2가 될 것으로 예상할 수 있습니다. 그러나 이 예제가 사실이라면 이 예제를 보고 있지 는 않을 것입니다. 위의 코드를 실행하면 출력은 다음과 같습니다 . 파이썬 표준 라이브러리는 이 문서에서 볼 수 있는 대부분의 기본 요소를 포함하는 스레딩을 제공합니다. 이 모듈의 스레드는 스레드를 멋지게 캡슐화하여 스레드와 함께 작업할 수 있는 깨끗한 인터페이스를 제공합니다. 로깅은 스레드로부터 안전하므로 다른 스레드의 메시지는 출력에서 고유하게 유지됩니다. 이제 스레드를 만들어 작동하도록 합시다! 인수를 사용하여 스레드를 식별하거나 이름을 지정하는 것은 번거롭고 불필요합니다.

각 스레드 인스턴스에는 스레드가 생성될 때 변경할 수 있는 기본값이 있는 이름이 있습니다. 스레드 이름을 지정하는 것은 여러 서비스 스레드가 서로 다른 작업을 처리하는 서버 프로세스에 유용합니다. 이 스레드가 데몬 스레드(True)인지 여부를 나타내는 부울 값입니다(False). 이 설정 해야 합니다 시작()가 호출 되기 전에, 그렇지 않으면 RuntimeError 발생. 초기 값은 작성 스레드에서 상속됩니다. 주 스레드는 데몬 스레드가 아니므로 기본 스레드에서 만든 모든 스레드는 데몬 = False로 기본값입니다. 현재 살아 있는 모든 Thread 개체 목록을 반환합니다. 목록에는 데모닉 스레드, current_thread()에서 만든 더미 스레드 개체 및 주 스레드가 포함됩니다. 아직 시작되지 않은 종료된 스레드 및 스레드는 제외됩니다. 간단한 단일 코어 CPU에서는 스레드 간 을 자주 전환하여 수행됩니다. 이를 컨텍스트 전환이라고 합니다. 컨텍스트 전환에서 스레드의 상태가 저장되고 인터럽트(I/O 또는 수동으로 설정됨)가 수행될 때마다 다른 스레드의 상태가 로드됩니다.

컨텍스트 전환은 모든 스레드가 병렬로 실행되는 것처럼 보일 정도로 자주 발생합니다(멀티태스킹이라고 합니다). 이 메서드는 스레드가 대기 하는 동안 장벽이 손상 되거나 재설정 하는 경우 BrokenBarrierError 예외를 발생시킬 수 있습니다. 일부 리소스는 여러 스레드에서 사용할 수 있도록 잠글 필요가 있지만 다른 리소스는 „소유”하지 않는 스레드에서 보기에서 숨지도록 보호해야 합니다. local() 함수는 별도의 스레드에서 뷰에서 값을 숨길 수 있는 개체를 만듭니다. 지금까지 스레딩, 큐 및 시간을 가져왔습니다. 스레딩은, 잘, 스레딩, 큐는 우리가 만드는 데 도움이 될 것입니다, 당신은 그것을 짐작, 큐입니다! 마지막으로, 우리는 시간을 가져옵니다. 여기에 시간을 가져오는 유일한 이유는 time.sleep() 함수를 사용하여 유휴 시간을 시뮬레이션하는 것입니다. 표준 라이브러리를 작성한 핵심 개발자는 큐가 다중 스레딩 환경에서 자주 사용되며 큐 자체 내에 모든 잠금 코드를 통합한다는 것을 알고 있었습니다. 큐는 스레드에서 안전합니다. 각 작업에 대한 스레드 이름과 해당 프로세스를 인쇄하는 아래 의 파이썬 프로그램을 고려하십시오 : 소비자는 파이프 라인에서 메시지를 읽고 가짜 데이터베이스에 기록합니다.이 경우 디스플레이에 인쇄하는 것입니다.

SENTINEL 값을 받으면 함수에서 반환되어 스레드가 종료됩니다.