Question regarding Queue object

Terry terry.yinzhe at gmail.com
Sun Apr 27 09:35:46 EDT 2008


On Apr 27, 6:27 pm, Terry <terry.yin... at gmail.com> wrote:
> Hello!
>
> I'm trying to implement a message queue among threads using Queue. The
> message queue has two operations:
> PutMsg(id, msg) #  this is simple, just combine the id and msg as one
> and put it into the Queue.
> WaitMsg(ids, msg) # this is the hard part
>
> WaitMsg will get only msg with certain ids, but this is not possible
> in Queue object, because Queue provides no method to peek into the
> message queue and fetch only matched item.
>
> Now I'm using an ugly solution, fetch all the messages and put the not
> used ones back to the queue. But I want a better performance. Is there
> any alternative out there?
>
> This is my current solution:
>
>     def _get_with_ids(self,wait, timeout, ids):
>         to = timeout
>         msg = None
>         saved = []
>         while True:
>             start = time.clock()
>             msg =self.q.get(wait, to)
>             if msg and msg['id'] in ids:
>                 break;
>             # not the expecting message, save it.
>             saved.append(msg)
>             to = to - (time.clock()-start)
>             if to <= 0:
>                 break
>         # put the saved messages back to the queue
>         for m in saved:
>             self.q.put(m, True)
>         return msg
>
> br, Terry

I just found that Queue is written in Python, maybe I can override it.



More information about the Python-list mailing list