python3 queue 예제

Off
Non classé

항목을 큐에 넣습니다. 선택적 args 블록이 true이고 시간 설정이 없음(기본값)인 경우 사용 가능한 슬롯을 사용할 수 있는 때까지 필요한 경우 차단합니다. 시간 지정이 양수인 경우 대부분의 시간 시간 시간 초에서 차단되고 해당 시간 내에 사용 가능한 슬롯을 사용할 수 없는 경우 전체 예외가 발생합니다. 그렇지 않으면 (블록은 거짓), 무료 슬롯을 즉시 사용할 수 있는 경우 큐에 항목을 넣어, 그렇지 않으면 전체 예외를 발생 (시간 제한은 무시) . maxsize는 큐에 추가할 수 있는 항목 수를 제한하는 데 사용되는 정수입니다. 삽입은 큐가 가득 차면 get()을 호출하여 항목이 사용되고 task_done()를 호출하여 완료될 때까지 차단됩니다. 최대 크기 <= 0인 경우 큐 크기는 무한합니다. 큐는 스타벅스에서 커피를 사기 위해 줄을 서있을 때처럼 일상 생활에서 쉽게 적용 할 수있는 간단한 데이터 구조 개념입니다. 이 예제를 기반으로 몇 가지 관찰을 수행해 보겠습니다: 큐가 가득 찼을 경우 True 반환, False 그렇지 않은 경우.

full())이 True를 반환하는 경우 get()에 대한 후속 호출이 차단되지 않는다는 보장은 없습니다. 마찬가지로 full())가 False를 반환하는 경우 put() 후속 호출이 차단되지 않는다는 보장은 없습니다. 이 섹션의 팟캐스팅 클라이언트의 소스 코드는 여러 스레드에서 Queue 클래스를 사용하는 방법을 보여 줍니다. 프로그램은 하나 이상의 RSS 피드를 읽고, 각 피드에서 가장 최근 5개의 에피소드를 다운로드할 수 있도록 인클로저를 대기열에 대기하고, 스레드를 사용하여 여러 다운로드를 병렬로 처리합니다. 프로덕션 용도에 대한 오류 처리가 충분하지 않지만 스켈레톤 구현에서는 큐 모듈의 사용을 보여 줍니다. 스레드의 대상 함수가 정의되면 작업자 스레드를 시작할 수 있습니다. download_enclosures())가 문 URL = q.get()을 처리하면 큐에 반환할 것이 있을 때까지 차단하고 기다립니다. 즉, 큐에 아무 것도 있기 전에 스레드를 시작하는 것이 안전합니다. CPython 구현 세부 정보: 이 메서드에는 재진입하는 C 구현이 있습니다.

즉, put() 또는 get(get)) 호출은 큐 내부의 내부 상태를 교착 상태나 손상 없이 동일한 스레드에서 다른 put() 호출에 의해 중단될 수 있습니다. 따라서 __del__ 메서드 또는 weakref 콜백과 같은 소멸자에서 사용하기에 적합합니다. 스레드: ConsumerThread-1 시작 은 큐에서 항목을 가져옵니다 [현재 크기 = 2] 시간에 = 22:22:50 스레드: 소비자 스레드-0 큐에서 프로세스 항목을 완료 [현재 크기 = 2] 시간에 = 22:22:50 큐 모듈은 다중 생산자, 다중 소비자 큐를 구현합니다. 여러 스레드 간에 정보를 안전하게 교환해야 하는 경우 스레드 프로그래밍에 특히 유용합니다. 이 모듈의 Queue 클래스는 필요한 모든 잠금 의미 체계를 구현합니다. 파이썬에서 스레드 지원의 가용성에 따라 달라집니다. 스레딩 모듈을 참조하십시오. 다중 스레딩이 아닌 다중 처리 컨텍스트에서 사용할 큐 클래스입니다. 그래서 우리는이 예제를 정의Job 함수, 워커의 매개 변수와 함께. 그 일을 하면서, 우리는 어떤 유휴 를 일으키는 무언가를 하는 척하고, 그것은 단지 시간입니다.sleep. 그런 다음 겹치지 않도록 일부 출력을 수행하는 동안 잠기는 인쇄 잠금을 사용합니다.

with 문이 완료되면 잠금이 자동으로 잠금 해제됩니다. 큐가 maxsize=0(기본값)으로 초기화된 경우 full()은 True를 반환하지 않습니다. 이 메서드는 큐 소비자 스레드에서 이전에 큐에 대기된 작업이 완료되었음을 나타내는 데 사용됩니다. empty() – 빈() 큐가 비어 있으면 True를 반환합니다. 그렇지 않으면 False입니다. FIFO 큐 사용 방법에 대한 다음 예제 를 참조하십시오: 큐 모듈은 다중 스레드 프로그래밍에 적합한 선차(FIFO) 데이터 구조를 제공합니다. 생산자와 소비자 스레드 간에 메시지 또는 기타 데이터를 안전하게 전달하는 데 사용할 수 있습니다. 잠금은 호출자용으로 처리되므로 많은 스레드가 동일한 Queue 인스턴스에서 안전하고 쉽게 작업할 수 있습니다.

Comments are closed.