Queue.Queue-like class without the busy-wait

Antoon Pardon apardon at forel.vub.ac.be
Tue Mar 29 13:51:57 CEST 2005


Op 2005-03-29, Paul Rubin schreef <http>:
> Antoon Pardon <apardon at forel.vub.ac.be> writes:
>> Well have a look at what I have written over the weekend. It uses
>> a seperate thread with one pipe for a wakeup mechanisme.
>
> Thanks, I'll look at it.  Why don't you use usleep instead of a pipe?

Because with the pipe the "sleep" can be indeterminate.

The select make the thread sleep until either of the folowing
happens.

  1) A timeout, which means one of the locks has to be broken

  2) A byte was received. This means a lock was tried to be
     acquired and inserted in the heap, so the timeout may
     need to be recalculated. (acquiring a lock, sends a
     byte over the pipe)

> I decided over the weekend that using a separate thread with usleep is
> the simplest thing to do in pure Python.

I'm not going to call my solution simple, but it wastes very few
cycles. if no thread is blocked on a lock, the select will just
block until that changes. No need for some kind of polling loop.

-- 
Antoon Pardon



More information about the Python-list mailing list