Why queue.empty() returns False even after put() is called?

Ian Kelly ian.g.kelly at gmail.com
Fri Nov 23 19:53:31 CET 2012

On Fri, Nov 23, 2012 at 9:57 AM, Peng Yu <pengyu.ut at gmail.com> wrote:
> Hi,
> The empty() returns True even after put() has been called. Why it is
> empty when there some items in it? Could anybody help me understand
> it? Thanks!
> ~/linux/test/python/man/library/multiprocessing/Queue/empty$ cat
> main.py
> #!/usr/bin/env python
> import multiprocessing
> queue = multiprocessing.Queue()
> print queue.empty()
> queue.put(['a', 'b'])
> queue.put(['c', 'd'])
> print queue.empty()

According to the docs, the Queue uses a background thread to load data into it:

    When a process first puts an item on the queue a feeder thread is
    started which transfers objects from a buffer into the pipe.

Most likely it still appears to be empty because this thread has not
had a chance to run yet.  If you try inserting a time.sleep() call,
you should see the queue become non-empty once the background thread
has run.

More information about the Python-list mailing list