Queues - Is Infinity all right?

Rob Hunter rob at cs.brown.edu
Sun Oct 5 11:19:42 EDT 2003


On Sunday, October 5, 2003, at 09:20 AM, Anand Pillai wrote:

> The standard Python Queue module, allows to generate queues that
> have no size limit, by passing the size argument as <= 0.
>
> q = Queue(0)
>
> In a multithreaded application, these queues could be useful
> when you have many threads using the queue for data access
> and synchronization.
>
> Is there a performance hit when one uses an 'infinite' queue
> when compared to a queue of fixed size?

No.  There is no performance hit for using infinite queues so far as I 
can tell from reading the source code.  (Now, of course, bigger queue 
== more memory == potential slowdowns, but that's different.)  In fact, 
technically, having an infinite queue might even be even faster than 
bounding the size because of this function:

   # Check whether the queue is full
     def _full(self):
         return self.maxsize > 0 and len(self.queue) == self.maxsize

Whenever you "get" or "put" into the queue, you have to call this 
function.  And, since, "and" is short-circuiting, for an infinite 
queue, it will always return false for "self.maxsize > 0" and therefore 
never have to evaluate the second part of the and.


>
> Of course it should depend upon the O(n) of the Queue data structure,
> how the time of access (get/put) varies with the number of items in
> it.

But it doesn't depend on such things.  There is no cost.  Check out the 
source code if you like.  On my computer it's in /usr/lib/python<some 
version>/Queue.py

Rob






More information about the Python-list mailing list