使用sqlite进行排序,并发队列实现(扭曲)?

时间:2012-01-19 11:59:15

标签: python sqlite queue twisted

我想设计一个使用扭曲框架的应用程序,其中一些延迟将多字段元素添加到队列中。

队列由具有其他延迟的应用程序使用。问题是我想要使用队列元素而不是按添加顺序,但是根据元素字段内容为某些元素赋予更高的优先级。

我当前(可能是错误的)想法是让一个执行sql select的生成器生成一个具有适当优先级的结果集并迭代此结果以生成延迟。问题是,当生成器迭代结果集时,可能已经通过延迟将更多元素添加到队列中。

每次调用生成器时,有没有办法在不执行新选择的情况下执行此操作?即可以"结果集"并且迭代器光标自动被更新"?

如果没有,你会如何实现这个?

2 个答案:

答案 0 :(得分:2)

Queue模块有一个PriorityQueue类,可以满足您的需求。

答案 1 :(得分:1)

为什么不使用Python列表,使用stdlib中的模块“heapq”来保持优先顺序? (您的列表元素将是(priority,time_of_insertion,objects)元组 - 并且由于数据保存在普通的Python列表中,您可以在扭曲的应用程序中传递它而没有任何问题。

我认为如果您需要的只是按优先级排序,那么比使用sqlite更容易。

(在这个答案中,我放置了一个可以帮助的heapq示例用法: heapq with custom compare predicate