Applications multi-processus du monde réel en Python

Études de cas et tests de performance

Explorez les applications pratiques du multiprocessing de Python dans le traitement des données, le calcul scientifique et le web scraping. Ce didacticiel comprend des études de cas réels et des repères comparant le code parallèle et le code séquentiel.

Programmation
Auteur·rice
Affiliation
Date de publication

5 février 2024

Modifié

9 mai 2025

Mots clés

le multiprocessing en Python, multiprocessing dans le monde réel, traitement des données multiprocessing, calcul scientifique Python, web scraping multiprocessing, benchmarks de traitement parallèle

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
    time.sleep(random.uniform(0.5, 1.0))
    # Renvoyer un résultat calculé (par exemple, la somme du lot)
    return sum(batch)

if __name__ == "__main__":
    data = list(range(1, 101))
    # Diviser les données en lots de 10
    batches = [data[i:i+10] for i in range(0, len(data), 10)]
    
    start_time = time.time()
    with multiprocessing.Pool(processes=4) as pool:
        results = pool.map(process_batch, batches)
    end_time = time.time()
    
    print("Processed batch results:", results)
    print("Multiprocessing time:", end_time - start_time)
Astuce

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
    time.sleep(1)
    return param * param

if __name__ == "__main__":
    params = range(10)
    with multiprocessing.Pool(processes=4) as pool:
        results = pool.map(simulate_experiment, params)
    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:
        response = requests.get(url)
        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:
        results = pool.map(fetch_page, urls)
    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.

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]

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

Codage heureux, et que vos applications s’exécutent plus rapidement et plus efficacement!

Explorer d’autres articles

Note

Voici d’autres articles de la même catégorie pour vous aider à approfondir le sujet.

placeholder

placeholder
Aucun article correspondant
Retour au sommet

Réutilisation

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2024. “Applications multi-processus du monde réel en Python.” February 5, 2024. https://www.datanovia.com/fr/learn/programming/python/advanced/parallel-processing/real-world-multiprocessing-applications.html.