Currently this code prints, MainThread done at sec 1 MainThread done at sec 1 MainThread done at sec 2 MainThread done at sec 1 MainThread done at sec 0 MainThread done at sec 3 MainThread done at sec 2 MainThread done at sec 5 MainThread done at sec 4 I need it to print MainThread 1 done at sec 1 MainThread 3 done at sec 1 MainThread 2 done at sec 2 MainThread 3 done at sec 1 MainThread 1 done at sec 0 MainThread 2 done at sec 3 MainThread 2 done at sec 2 MainThread 3 done at sec 5 MainThread 1 done at sec 4 How can I do this, by modifying this 1 line of code. print(threading.current_thread().name + ' done at sec ' + str(future.result())) Here is the full code import concurrent.futures import threading import pdb import time import random def Threads2(time_sleep): time.sleep(time_sleep) return time_sleep all_sections = [random.randint(0, 5) for iii in range(10)] test1 = [] with concurrent.futures.ThreadPoolExecutor(max_workers=3, thread_name_prefix="Ok") as executor: working_threads = {executor.submit(Threads2, time_sleep): time_sleep for index, time_sleep in enumerate(all_sections)} for future in concurrent.futures.as_completed(working_threads): print(threading.current_thread().name + ' done at sec ' + str(future.result())) Continue reading...