[Python-Dev] Priority queue (binary heap) python code

Fredrik Lundh fredrik@pythonware.com
Tue, 25 Jun 2002 19:03:41 +0200


Gustavo wrote:

>     def put(self, item, block=1, **kw):
>         if block:
>             self.fsema.acquire()
>         elif not self.fsema.acquire(0):
>             raise Full
>         self.mutex.acquire()
>         was_empty = self._empty()
> # <- Priority could be handled here as well.
>         self._put(item, **kw)
>         if was_empty:
>             self.esema.release()
>         if not self._full():
>             self.fsema.release()
>         self.mutex.release()
> 
>     def _put(self, item, **kw):
> # <- But here seems better
>         priority = kw.get("priority", self.defaultpriority)
>         bisect.insort(self.queue, (priority, item))

or better:

    def put(self, item, block=1, priority=None):
        if priority is None:
            priority = self.defaultpriority
        Queue.Queue.put(self, (priority, item), block)

</F>