On Fri, Nov 23, 2012 at 9:57 AM, Peng Yu <pengyu...@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. -- http://mail.python.org/mailman/listinfo/python-list