Comment paralléliser une boucle Python pour des performances multicœurs
Question :
Pour un processeur boucle Python liée, comment pouvons-nous paralléliser efficacement les opérations pour exploiter la puissance de plusieurs cœurs ?
Réponse :
L'interpréteur Python applique un verrouillage global de l'interprète (GIL), interdisant l'exécution simultanée de code Python par les threads du même interpréteur. Par conséquent, pour les tâches liées au processeur, l'utilisation de plusieurs processus au lieu de threads est plus efficace.
Parallélisation avec les pools de processus :
Python fournit deux méthodes simples pour créer des pools de processus. :
pool = multiprocessing.Pool(4) out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Cette approche utilise le module multitraitement et permet un contrôle direct sur le nombre de threads. Cependant, elle peut être sujette à des problèmes dans l'interpréteur interactif.
with concurrent.futures.ProcessPoolExecutor() as pool: out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Cette méthode utilise des .futures.ProcessPoolExecutor et fonctionne au sommet du module multitraitement, fournissant des fonctionnalité.
Les deux méthodes réalisent la parallélisation en distribuant des itérations de boucle à des processus séparés, améliorant ainsi considérablement les performances des calculs liés au processeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!