Le module threading permet de créer et de manipuler des threads.
Source : Le PyMOTW de Doug Hellman.
Considérons le bout de code suivant :
>>> import threading >>> def worker(): ... print 'worker' ... return ... >>> for k in range(5): ... t = threading.Thread(target = worker) ... t.start() ... worker worker worker worker worker >>>
Dans ce qui précède, on a instancié cinq objets Thread avec, pour chaque objet, le travail worker à réaliser. Puis on a donné l'ordre à chacun de travailler, avec la méthode start.
On peut passer des arguments à la fonction travail, en passant l'argument args au constructeur Thread. Le bout de code ci-dessus devient alors :
>>> import threading >>> def worker(numero): ... print 'worker', numero ... return ... >>> for k in range(5): ... t = threading.Thread(target = worker, args = (k,)) ... t.start() ... worker 0 worker 1 worker 2 worker 3 worker 4 >>>
On peut nommer le thread, et récupérer son nom :
Illustration...
>>> def worker(): ... print 'worker', threading.currentThread().getName() ... return ... >>> for k in range(5): ... t = threading.Thread(target = worker, name = 'numero '+str(k)) ... t.start() ... worker numero 0 worker numero 1 worker numero 2 worker numero 3 worker numero 4
Chaque thread possède un nom, quand bien même on ne lui en a pas donné : il sera alors appelé, dans ce cas, Thread-k, où $k$ est un compteur s'incrémentant à chaque nouvelle instantiation de thread.
Ainsi, si on crée, à la suite de ce qui précède, cinq nouveaux threads sans leur donner un nom, on trouvera...
>>> for k in range(5): ... t = threading.Thread(target = worker) ... t.start() ... worker Thread-6 worker Thread-7 worker Thread-8 worker Thread-9 worker Thread-10
Le module logging accepte la syntaxe %(threadName)s pour insérer le nom du thread courant dans les logs.
Une configuration de base des logs pourrait alors être
logging.basicConfig(level = logging.DEBUG, format = ...
A finir
Pour plus d'informations sur les logs : ici.
Jusqu'à présent, nous avons supposé que le programme principal ne se termine pas tant que tous les threads n'ont pas fini leur tâche, ce qui exclut la possibilité de réaliser un demon.