Ich habe Queue.Queue bissl erweitert so dass es ein zusätzliches prioritätsargument nimmt...
Code: Alles auswählen
import bisect,Queue
class QueueEntry(int):
"""Das ist wichtig weil bei einem Tuple zb (1,"spam") in eine liste (1,"egg") trotz gleicher Prioritaet und wenn es danach kommt vor "spam" drankaeme"""
def __new__(cls,line,prio=1):
return int.__new__(cls,prio)
def __init__(self,line,prio=1):
self.line=line
int.__init__(self,prio)
class PriorityQueue(Queue.Queue):
"""Erweitert Queue.Queue.put um ein Prioritätsargument"""
def put(self,line,prio=1):
"""Hier wird Einfach mit der Zeile und der Priorität ein QueueEntry erzeugt und an Queue.Queue.put übergeben"""
Queue.Queue.put(self,QueueEntry(line,prio))
def _init(self, maxsize): #python 2.4
"""Braeuchte man nur in Python 2.4 da dort collections.deque verwendet wird, was keine .insert() Methode hat"""
self.maxsize = maxsize
self.queue = []
def _get(self):
"""Ersten Eintrag rausholen und Zeile zurueckgeben"""
return self.queue.pop(0).line
def _put(self,x):
"""bisect reinsortieren lassen"""
bisect.insort_right(self.queue,x)