On Jan 19, 11:53 am, Frédéric Sagnes <spee...@gmail.com> wrote: > On Jan 17, 11:32 am, "Gabriel Genellina" <gagsl-...@yahoo.com.ar> > wrote: > > > > > En Fri, 16 Jan 2009 14:41:21 -0200, escribiste en el grupo > > gmane.comp.python.general > > > > I ran a few tests on the new Python 2.6multiprocessingmodule before > > > migrating a threading code, and found out the locking code is not > > > working well. In this case, a pool of 5 processes is running, each > > > trying to get the lock and releasing it after waiting 0.2 seconds > > > (action is repeated twice). It looks like themultiprocessinglock > > > allows multiple locking after the second pass. Running the exact same > > > code with threads works correctly. > > > I've tested your code on Windows and I think the problem is on the Queue > > class. If you replace the Queue with some print statements or write to a > > log file, the sequence lock/release is OK. > > You should file a bug report onhttp://bugs.python.org/ > > > -- > > Gabriel Genellina > > Thanks for your help gabriel, I just tested it without the queue and > it works! I'll file a bug about the queues. > > Fred > > For those interested, the code that works (well, it always did, but > this shows the real result): > > class test_lock_process(object): > def __init__(self, lock): > self.lock = lock > self.read_lock() > > def read_lock(self): > for i in xrange(5): > self.lock.acquire() > logging.info('Got lock') > time.sleep(.2) > logging.info('Released lock') > self.lock.release() > > if __name__ == "__main__": > logging.basicConfig(format='[%(process)0...@%(relativeCreated)04d] % > (message)s', level=logging.DEBUG) > > lock = Lock() > > processes = [] > for i in xrange(2): > processes.append(Process(target=test_lock_process, args= > (lock,))) > > for t in processes: > t.start() > > for t in processes: > t.join()
Opened issue #4999 [http://bugs.python.org/issue4999] on the matter, referencing this thread. -- Frédéric Sagnes -- http://mail.python.org/mailman/listinfo/python-list