ThreadPoolExecutor - wypisywanie w odpowiedniej kolejności

0

Cześć, jest oto taki prosty przykład

import time
import random
from concurrent.futures import ThreadPoolExecutor

letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]


def print_letters(index, letter):
    time.sleep(random.randint(1, 3))
    print(index, letter)


with ThreadPoolExecutor(max_workers=10) as executor:
    for index, letter in enumerate(letters, start=1):
        executor.submit(print_letters, index, letter)

po uruchomieniu programu mamy np. takie coś

1 a
8 h
10 j
2 b
4 d
6 f
5 e
3 c
9 i
7 g

czy jest jakiś sposób, aby program wypisywał to w odpowiedniej kolejności jak poniżej?

1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j 

czyli albo program sobie działa i wypisuje "1", kiedy będzie ona gotowa, później czeka na "2" i wypisuje, kiedy będzie gotowa itd. albo działa sobie i czeka aż wszystkie wątki się zakończą i wtedy wypisuje wszystkie w odpowiedniej kolejności.

Jeżeli ktoś może mnie nakierować lub poprawić kod tak, aby działało, będę wdzięczny. (jeżeli można, to najlepiej obie wersje w celach treningowych)

3

Wersja "działa sobie i czeka aż wszystkie wątki się zakończą i wtedy wypisuje wszystkie w odpowiedniej kolejności"

import time
import random
from concurrent.futures import ThreadPoolExecutor

letters = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]

def print_letters(letter):
    time.sleep(random.randint(1, 3))
    return letter

with ThreadPoolExecutor(max_workers=10) as executor:
    res = executor.map(print_letters, letters)

for i, ret in enumerate(res, start=1):
    print(i, ret)

1 użytkowników online, w tym zalogowanych: 0, gości: 1