Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi : Le Collecteur Parallèle De Carrés | Multithreading vs. Multiprocessing
Concepts Avancés de Python
Section 3. Chapitre 5
single

single

Défi : Le Collecteur Parallèle De Carrés

Glissez pour afficher le menu

Le multiprocessing en Python permet d'exécuter plusieurs processus en parallèle, chacun disposant de son propre interpréteur Python et espace mémoire. Cette approche est particulièrement utile pour les tâches intensives en calcul (CPU-bound), où l'on souhaite exploiter plusieurs cœurs de processeur afin d'accélérer les traitements. En utilisant le multiprocessing, il est possible d'améliorer significativement les performances pour des opérations nécessitant des calculs lourds, telles que le traitement de données, les calculs scientifiques ou les simulations.

Note
Remarque

La classe multiprocessing.Manager offre un moyen de créer des objets partagés — tels que des listes et des dictionnaires — pouvant être consultés et modifiés en toute sécurité par plusieurs processus. Lorsque vous devez collecter des résultats ou coordonner des données entre différentes instances de Process, il est recommandé d'utiliser un Manager pour créer ces objets partagés. Les listes et dictionnaires Python classiques ne sont pas partagés entre les processus, ainsi les modifications effectuées dans un processus ne seront pas visibles par les autres. Avec une liste créée par un Manager, chaque processus peut ajouter ou modifier des données, et toutes les modifications seront visibles par chaque processus utilisant cet objet partagé.

1234567891011121314151617181920
from multiprocessing import Process, Manager def add_value(value, shared_list): shared_list.append(value) if __name__ == "__main__": manager = Manager() shared_list = manager.list() processes = [] values = [10, 20, 30, 40, 50] for v in values: p = Process(target=add_value, args=(v, shared_list)) processes.append(p) p.start() for p in processes: p.join() print("Collected results:", list(shared_list))

Ce code illustre l'utilisation de multiprocessing.Manager pour créer une liste partagée accessible et modifiable par plusieurs processus. Chaque processus calcule le carré d'un nombre et ajoute son résultat à la liste partagée. En utilisant une liste Manager, il est possible de garantir que tous les processus partagent et collectent les données en toute sécurité, ce qui permet de rassembler les résultats de processus distincts s'exécutant en parallèle.

Tâche

Glissez pour commencer à coder

Écrire une fonction nommée compute_square qui prend un entier et une liste results comme arguments, calcule le carré de l'entier, puis ajoute le résultat à la liste results.

Ensuite, à l'aide de la classe multiprocessing.Process, créer un processus séparé pour chaque nombre dans la liste numbers afin de calculer son carré en parallèle. Collecter les résultats de tous les processus et les stocker dans la variable results.

  • Implémenter la fonction compute_square pour qu'elle prenne deux arguments : l'entier à mettre au carré et la liste results.
  • Dans compute_square, calculer le carré de l'entier et l'ajouter à la liste results.
  • Pour chaque nombre dans numbers, créer un objet Process ciblant compute_square avec le nombre et results comme arguments.
  • Démarrer tous les processus, puis les rejoindre pour s'assurer que tous les calculs sont terminés avant de vérifier les résultats.
  • Stocker tous les carrés calculés dans la liste results.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 5
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

some-alt