2011-05-11 8 views
0

파이썬에서 동기화 된 집합 클래스가 있습니까? Queue.Queue처럼? 나는 JMS 큐에 메시지를 보내고 reciepts을 처리 할 필요 해요 : 세트가있는 경우파이썬에서 동기화 된 집합

  • 를 영수증이 수신 세트
  • 에 보낸 메시지를 추적, 세트
  • 에서 삭제 비어 있음, 이벤트 설정

Queue과 동일한 인터페이스를 사용하는 것이 좋지만 어떤 순서로든 제거 할 수 있어야합니다.

+1

집합 연산은 (GIL 때문에) 원자 적입니다. 그러나 "집합이 비어 있고 이벤트를 설정했는지 확인"하는 원자 단위는 없습니다. –

답변

2

우물 Queue.Queue 후드 (and deque is not thread safe) 아래에 deque을 사용하십시오.

그럼 Queue.Queue 클래스를 확장하고 새 메서드를 추가하면 deque 메서드 deque.remove() (어떤 순서로도 요소를 제거한다는 의미 일 경우)을 호출 할 수 있습니다. 귀하의 새로운 방법은 스레드 안전합니다 Queue.Queue.put() 방법을보고해야 할 일의 예를 참조하십시오.

글쎄 그것은 약간 위험하고 레이스 컨디션 문제는 당신이 무언가를 놓치면 디버그하기가 매우 어렵지만 명확한 시각을 줄 수 있기를 바랍니다.