Re: Why queue.empty() returns False even after put() is called?
On 2012-11-23 16:57, Peng Yu 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() It works correctly for me. -- http://mail.python.org/mailman/listinfo/python-list
Re: Why queue.empty() returns False even after put() is called?
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
Re: Why queue.empty() returns False even after put() is called?
On 23Nov2012 11:53, Ian Kelly ian.g.ke...@gmail.com wrote: | On Fri, Nov 23, 2012 at 9:57 AM, Peng Yu pengyu...@gmail.com wrote: | 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. Conversely, might it not appear empty because the objects have been thrown at the pipe already, appearing to have been consumed? Or is there end-to-end handshaking controlling what .empty() tests? (Though again, the far end may have grabbed them already too.) -- Cameron Simpson c...@zip.com.au The ZZR-1100 is not the bike for me, but the day they invent nerf roads and ban radars I'll be the first in line..AMCN -- http://mail.python.org/mailman/listinfo/python-list