2012-07-11 2 views
1

값을 대기열에 넣은 후에 값을 변경하는 방법이 있습니까? 예를 들어, 몇 개의 변수가있는 대기열이있는 경우 첫 번째 변수를 대기열에없는 다른 값과 합할 수 있습니까? 이렇게하는 가장 좋은 방법은 다음과 같습니다.다중 처리 대기열 내의 변수 변경

x = queue.get() 
queue.put(x+some_value) 

또는 먼저 큐에서 개체를 제거하지 않고 수행 할 수있는 방법이 있습니까?

+0

대기열을 사용해야하는 특별한 이유가 있습니까? 대신 목록을 사용하지 않는 경우 값을 쉽게 수정할 수 있습니다. – EEP

답변

1

대기열이 아닌 다중 처리. 값, 다중 처리. 배열과 같은 공유 값을 원할 수도 있습니다. 대기열에서 허용하지 않습니다.

1

대기열은 이러한 방식으로 액세스를 허용하지 않습니다. 큐에 남아있는 오브젝트에 직접 액세스하도록 요청하면 큐의 목적에 어긋납니다.

내가 당신을 위해 무엇을 찾고있을 수도 것은 큐 대신 사용하는 양단 큐 개체라고 생각합니다 (여기에 대해 읽어 : http://docs.python.org/library/collections.html#collections.deque)

양단 큐 개체가 스레드 안전 및 큐처럼 행동 할 수 여전히 동안 인덱스 값을 사용하여 멤버에 직접 액세스 할 수 있습니다. 그러나 당신이 양 옆구리의 왼쪽이나 오른쪽 끝을 접근하지 않는 한 임의 접근에 대해서는 속도가 느립니다. 그래서 당신의 질문을 올바르게 이해한다면 이것은 당신의 경우에 문제가되어서는 안됩니다.

그러나 큐의 임의 액세스가 많은 경우 대신 multiprocessing.array를 사용하십시오.

+0

그들은 또한 공정 안전합니까? – user1423020

+0

내가 무슨 뜻인지 잘 모르겠다. 다른 프로세스에서 실행되는 경우 주소 공간이 공유되지 않으므로 걱정할 필요가 없습니다. 또한 원래 질문에 관해서는 Queue()에 내부 Queue() 큐가 있음을 알았습니다.이 큐는 본질적으로 양동이가없는 개체로, 원래 질문에서 설명한 방법으로 큐에 액세스하는 데 사용할 수 있습니다. 그러나 권장하지는 않습니다. 여기에 대한 자세한 내용은 http://stackoverflow.com/questions/717148/python-queue-queue-vs-collections-deque를 참조하십시오. –