Python 2.6's multiprocessing lock not working on second use?

Frédéric Sagnes speedup at
Mon Jan 19 11:53:57 CET 2009

On Jan 17, 11:32 am, "Gabriel Genellina" <gagsl-... at>
> 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 on
> --
> 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.


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

    def read_lock(self):
        for i in xrange(5):
  'Got lock')
  'Released lock')

if __name__ == "__main__":
    logging.basicConfig(format='[%(process)04d@%(relativeCreated)04d] %
(message)s', level=logging.DEBUG)

    lock = Lock()

    processes = []
    for i in xrange(2):
        processes.append(Process(target=test_lock_process, args=

    for t in processes:

    for t in processes:

More information about the Python-list mailing list