Queue Erweiterung

Code-Stücke können hier veröffentlicht werden.
Antworten
Sorgenkind
User
Beiträge: 34
Registriert: Samstag 24. Juli 2004, 19:25
Kontaktdaten:

Freitag 8. Oktober 2004, 13:28

Hallo...

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)
Es sollte komplett kompatibel zu dem normalen Queue sein
Antworten