#!/usr/bin/env python3 import sys, time import concurrent.futures as futures def waitOnWorkers(fs): done, notdone = futures.wait(fs, return_when=futures.ALL_COMPLETED) return done.pop().result() def worker(): time.sleep(3) print("worker done") return 42 def main(): poolSize = 500 executor = futures.ThreadPoolExecutor(max_workers=poolSize) fs = [ executor.submit(worker) for i in range(2) ] # Fill the pool with waiters that will rush for the exits at the same time waiters = [ executor.submit(waitOnWorkers, fs) for i in range(poolSize)] print ("Results") count = 1 for completedWaiter in futures.as_completed(waiters): print (count, ' ', completedWaiter.result()) count += 1 if __name__ == '__main__' : status = main() sys.exit(status)