Exécution concourante
*********************

Les modules documentés dans ce chapitre fournissent des outils
d'exécution concourante de code. Le choix de l'outil approprié dépend
de la tâche à exécuter (limitée par le CPU (*CPU bound*), ou limitée
la vitesse des entrées-sorties (*IO bound*)) et du style de
développement désiré (coopération gérée par des évènements ou
multitâche préemptif). En voici un survol :

* "threading" --- Thread-based parallelism

  * Données locales au fil d'exécution

  * Objets *Threads*

  * Verrous

  * RLock Objects

  * Condition Objects

  * Semaphore Objects

    * "Semaphore" Example

  * Event Objects

  * Timer Objects

  * Barrier Objects

  * Using locks, conditions, and semaphores in the "with" statement

* "multiprocessing" --- Process-based parallelism

  * Introduction

    * La classe "Process"

    * Contextes et méthodes de démarrage

    * Échange d'objets entre les processus

    * Synchronisation entre processus

    * Partager un état entre les processus

    * Utiliser un pool de *workers*

  * Référence

    * "Process" et exceptions

    * Tubes (*pipes*) et files (*queues*)

    * Divers

    * Objets de connexions

    * Primitives de synchronisation

    * Objets "ctypes" partagés

      * Le module "multiprocessing.sharedctypes"

    * Gestionnaires

      * Gestionnaires personnalisés

      * Utiliser un gestionnaire distant

    * Objets mandataires

      * Nettoyage

    * Pools de processus

    * Auditeurs et Clients

      * Formats d'adresses

    * Clés d'authentification

    * Journalisation

    * Le module "multiprocessing.dummy"

  * Lignes directrices de programmation

    * Toutes les méthodes de démarrage

    * Les méthodes de démarrage *spawn* et *forkserver*

  * Exemples

* "multiprocessing.shared_memory" --- Shared memory for direct access
  across processes

* The "concurrent" package

* "concurrent.futures" --- Launching parallel tasks

  * Executor Objects

  * ThreadPoolExecutor

    * ThreadPoolExecutor Example

  * ProcessPoolExecutor

    * ProcessPoolExecutor Example

  * Future Objects

  * Module Functions

  * Exception classes

* "subprocess" --- Subprocess management

  * Utiliser le module "subprocess"

    * Arguments fréquemment utilisés

    * Constructeur de *Popen*

    * Exceptions

  * Considérations de sécurité

  * Objets *Popen*

  * Utilitaires *Popen* pour Windows

    * Constantes Windows

  * Ancienne interface (*API*) haut-niveau

  * Remplacer les fonctions plus anciennes par le module "subprocess"

    * Remplacement de la substitution de commandes de terminal
      **/bin/sh**

    * Remplacer les *pipes* du *shell*

    * Remplacer "os.system()"

    * Remplacer les fonctions de la famille "os.spawn"

    * Remplacer "os.popen()", "os.popen2()", "os.popen3()"

    * Replacing functions from the "popen2" module

  * Remplacement des fonctions originales d'invocation du *shell*

  * Notes

    * Convertir une séquence d'arguments vers une chaîne de caractères
      sous Windows

    * Disabling use of "vfork()" or "posix_spawn()"

* "sched" --- Event scheduler

  * Scheduler Objects

* "queue" --- A synchronized queue class

  * Objets "Queue"

  * Objets "SimpleQueue"

* "contextvars" --- Context Variables

  * Variables de contexte

  * Gestion de contexte manuelle

  * Gestion avec *asyncio*

Les modules suivants servent de fondation pour certains services cités
ci-dessus :

* "_thread" --- Low-level threading API
