Using Dask

from dask.distributed import Client, LocalCluster
from tqdm import tqdm
cluster  = LocalCluster()
#client = Client(cluster)

cluster.scale(1)
client = Client(cluster)
def myfun(x):
    return x**2

results = [client.submit(myfun, x) for x in range(10)]

for x in tqdm(range(10),'test'):
    temp = results[x]
    results[x] = temp.result()
    temp.cancel()
test:   0%|          | 0/10 [00:00<?, ?it/s]
test: 100%|██████████| 10/10 [00:00<00:00, 164.08it/s]

results
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]