Mettre en œuvre le Multiprocessing
Maintenant, utilisons le multiprocessing pour accélérer les calculs. Le multiprocessing en Python permet l'exécution de plusieurs processus, qui peuvent s'exécuter sur différents noyaux CPU, réduisant le temps total requis pour les tâches liées au CPU.
Ouvrez un fichier nommé process_prime.py
dans le répertoire ~/project
avec le contenu suivant :
from multiprocessing import Process
import math
def is_prime(num):
"""
Vérifie si un nombre est premier.
"""
if num <= 1:
return False
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
return False
return True
def compute_primes(start, end):
"""
Calcule les nombres premiers dans une plage donnée.
"""
prime_numbers = [num for num in range(start, end) if is_prime(num)]
print(f"Premiers dans la plage {start}-{end}: {prime_numbers}")
processes = []
## Création de deux processus
for i in range(0, 20000, 10000):
## Crée un nouveau processus ciblant la fonction compute_primes et passant la plage en arguments
p = Process(target=compute_primes, args=(i, i+10000))
processes.append(p)
## Démarre le processus
p.start()
## Attend que tous les processus se terminent
for p in processes:
p.join()
print("Terminé avec le calcul des nombres premiers!")
Exécutez le script dans le terminal :
python process_prime.py
Cela affichera les nombres premiers trouvés dans les plages spécifiées et affichera un message de fin :
Premiers dans la plage 0-10000: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
......
9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973]
Premiers dans la plage 10000-20000: [10007, 10009, 10037, 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181, 10193,
......
19739, 19751, 19753, 19759, 19763, 19777, 19793, 19801, 19813, 19819, 19841, 19843, 19853, 19861, 19867, 19889, 19891, 19913, 19919, 19927, 19937, 19949, 19961, 19963, 19973, 19979, 19991, 19993, 19997]
Terminé avec le calcul des nombres premiers!