from multiprocessing import Event, Process, Queue import time MAX_WORKERS = 4 COUNT = 10000 SIZE = 1024 DATA = list(range(SIZE)) def reader(queue): while True: msg = queue.get() if msg is None: break def writer(queue, event): event.wait() for i in range(COUNT): queue.put(DATA) def do_bench(num_workers): queue = Queue() event = Event() readers_p = [] writers_p = [] for i in range(num_workers): reader_p = Process(target=reader, args=((queue),)) reader_p.start() readers_p.append(reader_p) for i in range(num_workers): writer_p = Process(target=writer, args=(queue, event)) writers_p.append(writer_p) writer_p.start() event.set() _start = time.time() for writer_p in writers_p: writer_p.join() for reader_p in readers_p: queue.put(None) for reader_p in readers_p: reader_p.join() print("took %s seconds with %d workers" % ((time.time() - _start, num_workers))) if __name__=='__main__': for i in range(MAX_WORKERS): do_bench(i + 1)