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.
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é.
1234567891011121314151617181920from 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.
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_squarepour qu'elle prenne deux arguments : l'entier à mettre au carré et la listeresults. - Dans
compute_square, calculer le carré de l'entier et l'ajouter à la listeresults. - Pour chaque nombre dans
numbers, créer un objetProcessciblantcompute_squareavec le nombre etresultscomme 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
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion