[Tutor] Changing instance attributes in different threads

Michael Lange klappnase at freenet.de
Thu Feb 9 22:22:00 CET 2006


On Wed, 08 Feb 2006 18:14:14 -0500
Kent Johnson <kent37 at tds.net> wrote:

> > Sorry, I missed to insert the time.sleep(0.1) I used in my original while loop into the example above.
> > The reason for using time.sleep() is that I need to avoid lots of loops over an empty buffer.
> > The amount of time until the producer thread reads a new data fragment into the buffer may
> > be significant, depending on the fragment size requested by the driver (e.g my fm801 card
> > wants fragments of 16384 bytes which is about 0.09 audio seconds). On the other hand the
> > buffer may contain hundreds of kB of data if other processes cause a lot of disk I/O.
> 
> Using Queue.get() will do this for you automatically. If there is no 
> data it will block until something is added to the queue and you avoid a 
>   polling loop. If there is data it will return it quickly.
> > 

> > Not if I call it with block=0; if I understand the docs correctly the queue will raise a Queue.Empty exception
> > if the queue is currently locked by another thread. 
> 
> No, the block flag controls whether the call will wait until something 
> is in the queue or return immediately. The call to Queue.get() will 
> always block waiting for the lock that controls access to the Queue; it 
> can't even tell if the Queue is empty until it gets this lock.
> 

Ah , then I misunderstood what the docs meant with "return an item if one is immediately available, else raise the Empty exception".
I thought "immediately available" means the Queue is currently not locked by another thread.

Thanks again

Michael



More information about the Tutor mailing list