# Ici on travaille dans un nouveau module easythread, comme
# vous voyez en regardant le nom du fichier en bas.  Ce module
# sera partie de notre jolie bibliothèque qui sert à faire des
# systèmes RPC.

import threading

class MonThread (threading.Thread):
    def __init__ (self, la_fonction, les_paramètres):
        threading.Thread.__init__ (self)
        assert isinstance (les_paramètres, tuple)
        self.fonction = la_fonction
        self.paramètres = les_paramètres
    def run (self):
        self.fonction (* self.paramètres)

# Étant donnée une fonction et des paramètres, démarre la fonction
# (applée avec les paramètres) dans un nouveu thread.
# Renvoie le thread comme résultat.  Si la fonction donnée
# soulève une exception durant son exécution alors le thread
# sort, et l'utilisateur de la fonction start ne voit rien.
# C'est à dire, les exceptions ne se propagent pas d'un thread
# à l'autre.  [Remarque : ce manque de propagation est
# souhaitable.]
def start (function, * parameters):
    le_thread = MonThread (function, parameters)
    le_thread.start ()
    return le_thread
