여러 스레드가 물건을 넣을 수 있고 여러 스레드가 읽을 수있는 대기열이 필요합니다.
파이썬에는 적어도 두 개의 큐 클래스 인 Queue.Queue와 collections.deque가 있으며, 전자는 후자를 내부적으로 사용합니다. 둘 다 설명서에서 스레드 안전하다고 주장합니다.
그러나 큐 문서에는 다음과 같은 상태가 있습니다.
collections.deque는 잠금이 필요없는 빠른 원자 append () 및 popleft () 작업을 사용하여 언 바운드 큐의 대체 구현입니다.
내가 이해하지 못하는 것 : 이것이 deque가 완전히 스레드 안전하지 않다는 것을 의미합니까?
그렇다면 두 클래스의 차이점을 완전히 이해하지 못할 수도 있습니다. 대기열에 차단 기능이 추가되어 있음을 알 수 있습니다. 반면에 작동 자에 대한 지원과 같은 일부 deque 기능이 손실됩니다.
내부 deque 객체에 직접 액세스하는 것은
Queue ()에서 x
스레드 안전?
또한 큐가 이미 스레드 안전 상태 일 때 큐가 뮤텍스를 사용하여 작동하는 이유는 무엇입니까?
deque
동일한 스레드에서도 반복 하는 동안 추가 / 삭제를 할 때마다이 오류가 발생할 수 있습니다 . 이 오류를 얻을 수없는 유일한 이유 Queue
는 Queue
반복을 지원하지 않기 때문입니다.
RuntimeError: deque mutated during iteration
당신이 얻을 수있는 것은deque
여러 스레드간에 공유 를 사용하고 잠금이없는 것입니다 ...