def solveur(candidats, fonction):
    """Essaye de résoudre l'ensemble des candidats.

    Boucle infinie qui prend des candidats dans la queue, tente de les
    resoudre, et applique la fonction quand ils sont resolu.
    """
    while True:
        grille = candidats.get()
        grille.remplit()
        if grille.resolu:
            fonction(grille)
        elif grille.impossible:
            pass
        else:
            x, y = grille.cherche_plus_proche()
            for valeur in grille.possible_case[x][y]:
                copie = grille.copy()
                copie.affecte((x, y), valeur)
                candidats.put(copie)
        candidats.task_done()
