Bonjour !

Je suis entrain d'écrire un algorithme génétique pour optimiser des valeurs d'une IA pour le jeu Othello.
Dans mon algorithme génétique, je calcule une valeur de "fitness" qui est nécessaire pour la suite. Le problème est qu'elle lance 2 parties d'Othello pour la calculer.
J'ai voulu alors paralléliser ce calcul en lançant chaque partie sur un thread. Donc 2 thread.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def fitnessRank(new_population):
    fitness_result = {}
    for i in range(0,len(new_population)):
        thread_1 = fitnessCompute1.fitnessCompute1(randomPlayer.myPlayer(),myPlayer.myPlayer(new_population[i])) #Blanc
        thread_2 = fitnessCompute2.fitnessCompute2(myPlayer.myPlayer(new_population[i]),randomPlayer.myPlayer()) #Noir
        thread_1.start()
        thread_2.start()
 
        thread_1.join()
        thread_2.join()
 
        nb_whites = thread_1.result
        nb_blacks = thread_2.result
        nb_pieces_game_1 = nb_whites
        nb_pieces_game_2 = nb_blacks
 
        fitness_result[i] = ((nb_pieces_game_2 - nb_pieces_game_1)/2) #Valeur fitness
        print("Game effectuée :",i)
    print("FitnessResult tab = ", fitness_result)
    return sorted(fitness_result.items(), key = operator.itemgetter(1), reverse = True)
J'ai créé une classe par thread (fitnessCompute1 et fitnessCompute2) qui lance chacun dans leur run une partie.
Mon problème étant le suivant: Je suis fasse à un blocage d'un des threads avec un des deux join(). En effet, je suppose qu'un thread fini avant l'autre et bloque ainsi l'autre avec le join. (Ce qui n'est peut-être pas le cas, ma connaissance des threads avec python est très limité.). Je termine donc avec une attente infinie, et mon programme ne continue plus de s'exécuter.
Mon but étant le suivant: Attendre que les deux threads se finissent avant de continuer. Il semblerait que le join() fasse office de "barrière", mais me provoque une attente infini à certains moment.

Je me demandais alors, est-ce bien écrit ce que je voulais ?

Je vous remercie d'avance pour votre aide sur mon problème !