2012-01-19 40 views
3

我想設計一個應用程序使用扭曲的框架與一些延遲添加多字段元素的隊列。用sqlite排序併發隊列實現(扭曲)?

該隊列由具有其他延遲的應用程序使用。問題是我想消費的隊列元素不是通過添加的順序,而是給予基於元素字段內容的某些元素更高的優先級。

我目前的(可能是錯誤的)想法是有一個生成器執行一個sql select,它會產生一個結果集,並具有適當的優先級並迭代這個結果來生成延遲。問題是,當生成器遍歷結果集時,其他元素可能已被延遲添加到隊列中。

有沒有一種方法可以在每次調用generator時都不執行新的選擇?即可以將「結果集」和迭代器遊標自動更新嗎?

如果不是,你將如何實現這一點?

回答

2

隊列模塊具有PriorityQueue類可滿足您需求

+0

謝謝。 PriorityQueue正是我所期待的。 – ARF

1

爲什麼不使用Python列表,使用stdlib中的模塊「heapq」使其保持優先順序? (您的列表元素將是(優先級,time_of_insertion,對象)的元組 - 因爲數據保存在正常的Python列表中,所以您可以在扭曲的應用程序中傳遞它,而不會出現任何問題。

我認爲這會更容易比使用SQLite如果所有你需要的是按優先級排序

(在這個答案我把heapq的用法的例子,可以幫助: heapq with custom compare predicate)。

+0

我不認爲這應該是downvoted。它是合理的答案。 –