On Mon, Oct 20, 2008 at 10:12 PM, Piotr Sobolewski <[EMAIL PROTECTED]> wrote: > Hello, > I have such program: > > import time > import thread > def f(): > global lock > while True: > lock.acquire() > print thread.get_ident() > time.sleep(1) > lock.release() > lock=thread.allocate_lock() > thread.start_new_thread(f,()) > thread.start_new_thread(f,()) > time.sleep(60) > > As you can see, I start two threads. Each one works in an infinite > loop. > Inside that loop it acquires lock, prints its own id, sleeps a bit and > then > releases lock. > > When I run it, I notice that only one thread works and the other one > never > has a chance to run. I guess it is because the thread don't have a > chance > to release the GIL - after it releases the lock, it almost immediately > (in > the very next bytecode command) reacquires it. I know I can > put "time.sleep(0.01)" command after between release and reacquire, > but it > doesn't seem elegant - why should I make my program sleep instead of > work?
You let *one thread* sleep so that the *other thread* can wake, grab the lock, and *work*. Cheers, Chris -- Follow the path of the Iguana... http://rebertia.com > > Is there any simple way to release the GIL? Like: > lock.release() > thread.release_gil() > ? > > Thanks in advance! > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list