(original) (raw)
from multiprocessing import Process, Queue, Lock from Queue import Empty import time start = time.time() def now(): return time.time() - start class test_lock_process(object): def __init__(self, lock, id, queue): self.lock = lock self.id = id self.queue = queue self.read_lock() def read_lock(self): for i in xrange(2): self.lock.acquire() self.queue.put('%9.6f [proc%d] Got lock' % (now(), self.id)) # print '%s got lock' % self.id time.sleep(.2) self.queue.put('%9.6f [proc%d] Released lock' % (now(), self.id)) self.lock.release() # print '%s rel lock' % self.id def test_lock(processes=10, lock=Lock(), queue=None): print_result = False if queue == None: print_result = True queue = Queue() procs = [] for i in xrange(processes): procs.append(Process(target=test_lock_process, args=(lock,i,queue,))) for t in procs: t.start() for t in procs: t.join() print '' if print_result: try: while True: print queue.get(block=False) except Empty: pass if __name__ == "__main__": test_lock(processes=5)