On Apr 10, 6:48 am, Peter Otten <__pete...@web.de> wrote: > grocery_stocker wrote: > > When I run the following... > > > #!/usr/bin/python > > > import time > > import thread > > import threading > > > def get_first_part(string, lock, sleeptime, *args): > > global counter > > lock.acquire() > > try: > > counter = counter + 1 > > data = counter > > print "%s value is %d" % (string, counter) > > time.sleep(sleeptime) > > finally: > > lock.release() > > return data > > def get_both_parts(string, lock, sleeptime, *args): > > global first, second > > lock.acquire() > > try: > > first = get_first_part() > > second = get_second_part() > > print "%s values are %d and %d" % (string, first, > > second) > > time.sleep(sleeptime) > > finally: > > lock.release() > > return first, second > > How come RLock isn't working in this example? > > When get_both_parts() acquires the lock it invokes get_first_part() which > tries to acquire the lock. This fails because get_both_parts() does not > release the lock until after get_first_part() has finished... > > Peter
i thought a Rlock() (vs a Lock()) was suspposed to get around this kind of a problem. -- http://mail.python.org/mailman/listinfo/python-list