#!/usr/bin/python # -*- coding: utf-8 -*- #from multiprocessing import Process, Lock, Queue from threading import Thread, Lock from Queue import Queue, Empty import time from os import getpid class test_lock_process(object): def __init__(self, lock, queue, offset): self.lock = lock self.queue = queue self.offset = offset self.read_lock() def log(self, message): output = '[%04d@%05d] %s' % (getpid(), (time.time() - self.offset)*10000, message) if self.queue: self.queue.put(output) else: print output def read_lock(self): for i in xrange(5): self.lock.acquire() self.log('Got lock') time.sleep(.2) self.log('Released lock') self.lock.release() if __name__ == "__main__": offset = time.time() # Set to None to use print instead of a queue queue = Queue() lock = Lock() processes = [] for i in xrange(2): processes.append(Thread(target=test_lock_process, args=(lock,queue,offset,))) for t in processes: t.start() for t in processes: t.join() if queue: try: while True: print queue.get(block=False) except Empty: pass