The code generate 10 multi threads for running single_function.
If you have look the pid in result, thread is finished by quickly proceeded.
..
import queue
from concurrent.futures import ThreadPoolExecutor
#function for thread
def single_function(input, pid, out_queue):
    total = 0
    for i in range(0,input):
        for j in range(0, input):
            for k in range(0, input):
                total = total + 1
    out_queue.put( {'index':pid, 'result':total })
    
#run thread
my_queue = queue.Queue()
with ThreadPoolExecutor(max_workers=10) as executor:
    for pid in range(0, 10):
        executor.submit(single_function, 100, pid, my_queue)
    
#get result of each thread
result = {}
while not my_queue.empty():
    get = my_queue.get()
    print(get)
#finish all thread
..
result
{'index': 1, 'result': 1000000}
{'index': 3, 'result': 1000000}
{'index': 2, 'result': 1000000}
{'index': 0, 'result': 1000000}
{'index': 5, 'result': 1000000}
{'index': 4, 'result': 1000000}
{'index': 8, 'result': 1000000}
{'index': 6, 'result': 1000000}
{'index': 9, 'result': 1000000}
{'index': 7, 'result': 1000000}