Comment obtenir le parallélisme en Python pour une efficacité améliorée ?

DDD
Libérer: 2024-10-22 20:29:24
original
688 Les gens l'ont consulté

How to Achieve Parallelism in Python for Enhanced Efficiency?

Programmation parallèle en Python

Traditionnellement, OpenMP est utilisé pour la programmation parallèle en C . Cependant, Python ne prend pas en charge OpenMP. Cela soulève la question : comment pouvons-nous paralléliser des sections spécifiques du code Python pour améliorer l'efficacité ?

Considérez la structure de code suivante :

solve1(A)
solve2(B)
Copier après la connexion

Où solve1 et solve2 sont des fonctions indépendantes. Notre objectif est d'exécuter ces fonctions simultanément, réduisant ainsi le temps d'exécution global.

En Python, nous pouvons exploiter le module multitraitement pour réaliser le parallélisme. Pour le scénario donné, un pool de traitement peut être utilisé :

<code class="python">from multiprocessing import Pool

pool = Pool()
result1 = pool.apply_async(solve1, [A])  # Evaluate "solve1(A)" asynchronously
result2 = pool.apply_async(solve2, [B])  # Evaluate "solve2(B)" asynchronously
answer1 = result1.get(timeout=10)
answer2 = result2.get(timeout=10)</code>
Copier après la connexion

Cette approche crée des processus qui gèrent simultanément des tâches spécifiques. Puisqu'aucun processus n'est spécifié, le code utilise les cœurs de processeur disponibles, permettant à chaque cœur d'exécuter un processus simultanément.

Pour mapper une liste à une seule fonction, nous pouvons utiliser :

<code class="python">args = [A, B]
results = pool.map(solve1, args)</code>
Copier après la connexion

Notez que l'utilisation de threads n'est pas recommandée car le GIL (Global Interpreter Lock) restreint les opérations sur les objets Python. L'utilisation de processus contourne cette limitation, permettant une véritable concurrence.

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal