On Apr 10, 8:39 am, Peter Otten <__pete...@web.de> wrote: > grocery_stocker wrote: > > 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. > > Oops, yes. In get_both_parts() try calling get_first_part/get_second_part() > with the three necessary arguments... >
Doh. I knew that. I really did. -- http://mail.python.org/mailman/listinfo/python-list