2012-07-11 26 views
1

有沒有方法在將值放入隊列後進行更改?例如,如果我有一個隊列中有幾個變量,我可以將第一個變量和其他一些不在隊列中的值相加嗎?會做到這一點的最好辦法是這樣的:更改多處理隊列中的變量

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

還是有辦法做到這一點,而不從隊列中第一刪除對象?

+0

是否有一個特殊原因需要使用隊列?爲什麼不用列表來代替,那麼你可以很容易地修改這些值。 – EEP 2012-07-11 20:13:36

回答

1

您可能想要共享的值,如multiprocessing.Value,multiprocessing.Array,而不是隊列。隊列不允許它。

1

隊列不允許以這種方式訪問​​;您要求直接訪問仍在隊列中的對象,這會破壞隊列的用途。

我想你可能會尋找的是一個雙端隊列的對象,而不是使用隊列(這裏讀到它:http://docs.python.org/library/collections.html#collections.deque

一個deque對象是線程安全的,並且可以像一個隊列,同時還允許以索引值直接訪問其成員。但是,除非你正在訪問雙端隊列的左端或右端,否則隨機訪問會變慢,所以如果我正確理解你的問題,這不應該是你的情況的問題。

如果您確實有很多隨機訪問deque,只需使用multiprocessing.array即可。

+0

他們是否也處理安全? – user1423020 2012-07-11 20:44:54

+0

我不確定我明白你的意思。如果它在不同的進程中運行,地址空間將不會被共享,因此不必擔心。另外,關於你原來的問題,我意識到Queue()有一個內部的Queue()。隊列,它基本上是一個deque對象,你可以用你在原始問題中描述的方式訪問隊列。不過不推薦;閱讀更多關於它在這裏:http://stackoverflow.com/questions/717148/python-queue-queue-vs-collections-deque – 2012-07-11 21:57:35