import time from multiprocessing.pool import ThreadPool import threading def producer(): time.sleep(1) return 1 def consumer(future): print future.get() pool = ThreadPool(10) future = pool.apply_async(producer) thread1 = threading.Thread(target=consumer, args=(future,)) thread2 = threading.Thread(target=consumer, args=(future,)) thread1.start() thread2.start() print "Waiting..." thread1.join() thread2.join()