flowchart LR A[Start] --> B[Divide Task into Batches] B --> C[Distribute Batches to Processes] C --> D[Process in Parallel] D --> E[Aggregate Results] E --> F[End]
Introduction
Le multiprocessing dans Python est un outil puissant pour accélérer les applications critiques en termes de performances. Lorsqu’il est utilisé efficacement, il peut réduire de manière significative le temps d’exécution des tâches lourdes en répartissant le travail sur plusieurs cœurs de processeurs. Dans ce tutoriel, nous explorons plusieurs cas d’utilisation réels des capacités de multiprocessing de Python. Nous verrons comment le multiprocessus peut être appliqué au traitement des données, au calcul scientifique et à l’exploration du Web, et nous inclurons des comparaisons avec le code séquentiel pour démontrer son efficacité.
Étude de cas 1 : Traitement des données
Le traitement de grands ensembles de données est un défi courant en science des données. Le multiprocessus peut être utile en divisant la charge de travail entre plusieurs processus, réduisant ainsi le temps nécessaire pour effectuer des opérations telles que le nettoyage, la transformation et l’agrégation des données.
Exemple : Traitement des données par lots
Imaginez que vous ayez un grand ensemble de données à traiter par lots. En tirant parti du multiprocessing, vous pouvez traiter plusieurs lots simultanément:
import multiprocessing
import time
import random
def process_batch(batch):
# Simuler le traitement des données avec un sommeil
0.5, 1.0))
time.sleep(random.uniform(# Renvoyer un résultat calculé (par exemple, la somme du lot)
return sum(batch)
if __name__ == "__main__":
= list(range(1, 101))
data # Diviser les données en lots de 10
= [data[i:i+10] for i in range(0, len(data), 10)]
batches
= time.time()
start_time with multiprocessing.Pool(processes=4) as pool:
= pool.map(process_batch, batches)
results = time.time()
end_time
print("Processed batch results:", results)
print("Multiprocessing time:", end_time - start_time)
Comparez le temps d’exécution de l’approche multiprocessus ci-dessus avec celui d’une boucle séquentielle pour constater les gains de performance.
Étude de cas 2 : Calcul scientifique
Les calculs scientifiques impliquent souvent un traitement numérique lourd, qui peut être parallélisé de manière efficace. Le multiprocessus vous permet de répartir les simulations, les calculs matriciels ou les algorithmes itératifs sur plusieurs cœurs.
Exemple : Simulation parallèle
Envisagez une simulation qui exécute une tâche à forte intensité de calcul plusieurs fois avec différents paramètres. Grâce au multitraitement, vous pouvez exécuter ces simulations simultanément:
import multiprocessing
import time
def simulate_experiment(param):
# Simuler un calcul complexe
1)
time.sleep(return param * param
if __name__ == "__main__":
= range(10)
params with multiprocessing.Pool(processes=4) as pool:
= pool.map(simulate_experiment, params)
results print("Simulation results:", results)
Étude de cas n° 3 : Web Scraping
Les tâches de ‘web scraping’ sont souvent liées aux E/S, mais lorsqu’il s’agit de récupérer un grand nombre de pages, la combinaison du multiprocessing et des E/S asynchrones peut apporter des améliorations significatives en termes de performances. Le multiprocessus peut être utilisé pour paralléliser le scraping de plusieurs pages web simultanément.
Exemple : Récupération parallèle de données sur le Web
import multiprocessing
import requests
def fetch_page(url):
try:
= requests.get(url)
response return response.status_code, url
except Exception as e:
return str(e), url
if __name__ == "__main__":
= [
urls "https://example.com/page1",
"https://example.com/page2",
"https://example.com/page3",
"https://example.com/page4",
"https://example.com/page5"
]with multiprocessing.Pool(processes=4) as pool:
= pool.map(fetch_page, urls)
results for status, url in results:
print(f"URL: {url}, Status: {status}")
Comparaisons de points de repère
Lorsque l’on compare le multitraitement à l’exécution séquentielle, les gains de performance deviennent évidents pour les tâches qui sont liées au processeur ou qui impliquent l’attente d’opérations d’entrée/sortie. Par exemple, l’exécution séquentielle des exemples de traitement de données ou de simulation ci-dessus prendrait beaucoup plus de temps que leur exécution en parallèle.
Conclusion
Le multiprocessus peut améliorer considérablement les performances de vos applications Python, en particulier lorsqu’il s’agit de grands ensembles de données, de simulations complexes ou d’analyses de sites Web à haut volume. En comprenant les applications du monde réel et en comparant les performances avec les approches séquentielles, vous pouvez prendre des décisions éclairées sur l’intégration du multiprocessing dans vos projets.
Plus d’informations
- Optimisation du code multiprocesseur en Python
- Multiprocessing vs. Multithreading en Python
- Programmation concurrente avec concurrent.futures vs. multiprocessing
Codage heureux, et que vos applications s’exécutent plus rapidement et plus efficacement!
Explorer d’autres articles
Voici d’autres articles de la même catégorie pour vous aider à approfondir le sujet.
Réutilisation
Citation
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Applications multi-processus du monde réel en Python},
date = {2024-02-05},
url = {https://www.datanovia.com/fr/learn/programming/python/advanced/parallel-processing/real-world-multiprocessing-applications.html},
langid = {fr}
}