Queue Erweiterung
Verfasst: Freitag 8. Oktober 2004, 13:28
Hallo...
Ich habe Queue.Queue bissl erweitert so dass es ein zusätzliches prioritätsargument nimmt...
Es sollte komplett kompatibel zu dem normalen Queue sein
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)