2016-02-21 28 views
2

我對Python比較陌生,正在尋找像Python的JoinableQueue之類的東西,但它具有雙向或堆棧式的行爲。具體來說,因爲我正在處理隊列中不同進程中的項目,所以我希望能夠在隊列中已有的內容之前添加要處理的新項目(即推入堆棧或添加到隊列前面雙端隊列)。 Java有BlockingDeque這正是我想要的,但我不能真正使用Java來完成這個項目。任何指針或思考這個問題的新方法將不勝感激!有沒有像Python的JoinableDeque可用的東西?

+0

您可能可以繼承JoinableQueue。通常可以通過使用兩個(可連接)隊列來實現出隊。有沒有特別的東西不讓你這樣做? – ffledgling

+1

是的!我嘗試了繼承JoinableQueue,因爲它內部使用了一個deque。不幸的是,它還有一個內部運行的QueueFeederThread,它會立即耗盡內部deque(如果您正在查看代碼,則使用self._buffer),並將任何添加到雙端隊列中的內容發送到管道,deque行爲會丟失。如果涉及到的話,我確實可以使用兩個JoinableQueues來實現自己的Deque,但如果可能的話,我寧願避免它。 – mes5k

回答

0

對於multiprocessing,隊列語義不僅僅是在進程間通信之上實現的東西,而是它固有的。因此,最簡單的解決方案可能是通過使用JoinableQueue來構建可連接的堆棧,並首先將所有任務放入臨時隊列,然後對新元素進行排隊並從臨時隊列中填充任務,從而實現對堆棧的壓入。從不同進程推入堆棧需要一些鎖定來維持堆棧的順序。

+0

謝謝托馬斯。我真的希望自己不需要實現這一點,但事實如此。 – mes5k