Le multithreading
Les exemples sont dans le package demos.parallelism.threads. Certains exemples ont une version
avec un affichage plus riche dans demos.parallelism.threads_rich.
Le besoin de parallélisme
Le script 01_thread.py est un exemple séquentiel destiné à illustrer la durée totale d'exécution
de deux tâches. La version demos.parallelism.threads_rich.01_thread_rich possède un affichage
moins chargé.
Exécutez :
python -m demos.parallelism.threads.01_thread
python -m demos.parallelism.threads_rich.01_thread_rich
Les treads, les bases
02a_thread.py: exemple avec des threads. La durée totale est celle du programme principal. L'ajout des.join()permet d'attendre la finalisation des actions en parallèle.demos.parallelism.threads_rich.02_thread_rich: est le même que le précédent avec un affichage moins chargé.02b_custom_thread.py: de comportement identique au précédent mais en déclarant un objet thread custom.demos.parallelism.threads_rich.02_custom_thread_rich: version avec thread custom et affichage plus informatif.
Exécutez :
python -m demos.parallelism.threads.02a_thread
python -m demos.parallelism.threads_rich.02_thread_rich
python -m demos.parallelism.threads.02b_custom_thread
python -m demos.parallelism.threads_rich.02_custom_thread_rich
Les script 02c_timer.py est une curiosité adapté à notre cas et permet de lancer un thread après
un délais.
Les sémaphores
03_semaphore.py: exemple de basedemos.parallelism.threads_rich.03_semaphore_rich: affichage plus lisible.
Éxécutez :
python -m demos.parallelism.threads_rich.03_semaphore_rich
Une interface plus haut niveau
Le module concurrent.futures fournit une interface haut niveau pour l'exécution asynchrone.
04a_thread_future.py: Reprise du second exemple avec les threads.04b_more_futures.py: Pour aller plus loin en associant une callback aux tâches.
Exécutez :
python -m demos.parallelism.threads.04a_thread_futures
python -m demos.parallelism.threads.04b_more_futures
Les verrous
05a_lock.py: Illustration du problème de concurrence.05b_lock_bank01_without.py: exemple illustrant la concurrence avec unThreadPoolExecutorsans lock.05c_lock_bank02_withlock.py: exemple illustrant la concurrence avec unThreadPoolExecutoravec lock.05d_lock_bank03_deadlock.py: exemple conduisant au deadlock.
Exécutez :
python -m demos.parallelism.threads.05a_lock
python -m demos.parallelism.threads.05b_lock_bank01_without
python -m demos.parallelism.threads.05c_lock_bank02_withlock
python -m demos.parallelism.threads.05d_lock_bank03_deadlock
06_wait.py
Concurrence gérée avec la méthode wait.
Les limites du multithreading
Illustration avec le script 07_limit.py.
Exécutez :
python -m demos.parallelism.threads.07_limit