with concurrent.futures.ProcessPoolExecutor(max_workers=cpu_count) as executor: for task in get_task(tasks): future = executor.submit(task) futures.add(future)
def wait_for(futures): try: for future in concurrent.futures.as_completed(futures): err = futures.exception() if not err: result = future.result() else: raise err except KeyboardInterrupt as e: for future in futures: future.cancel() print "Task has been canceled!" print e return result