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

2012-11-23 Thread MRAB

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?

2012-11-23 Thread Ian Kelly
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?

2012-11-23 Thread Cameron Simpson
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