cptCarPcs.py
cptCarPcs.py — 4.3 KB
Contenu du fichier
#!/usr/bin/env python # cptCharPcs.py #------------------- # Ce programme l'occurence de certains caractères dans un texte à l'aide de fils d'exécution # # Paramètres sur la ligne de commandes # - Parm #1 : nombre de processus à utiliser # - Parm #2 : nom du fichier contenant le texte # - Parm #3 : nom du fichier de sortie from multiprocessing import Process, Value, Array from multiprocessing import Semaphore import time from datetime import datetime import sys #---------------------------------------------------------------------- # decompte # # fonction qui effectue le decompte des caractères # # Entrée : index - identifiant du fil # depart - indice début de la suite de caractères à traiter # fin - indice fin de la suite de caratères à traiter # texte - texte à traiter # alpha - caractères à compter # Sortie : nbCar : variable modifiée par chaque fil # # ******************************************************** # *** Insérer le code de votre fonction ici ************** #********************************************************* def decompte(index, depart, fin, texte,alpha, nbCar): #******************************************************************************** # Programme principale qui initialise et démarre les fils # # Entree : (sur la ligne de commandes) # nbPcs - nombre de fils d'exécution # nom : fichier contenant le texte # nom_sortie : fichier contenat le résultat # #******************************************************************************** if __name__=="__main__": carParPcs= [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; nbCar = Array('i', 63) # Obtention des paramètres nbPcs = eval(sys.argv[1]) # nombre de pcs d'exécution nom = str(sys.argv[2]) # nom du fichier contenant le texte nom_sortie = str(sys.argv[3]) # nom du fichier cntenant les résultats #-------------------------------- # ***** Affichage pour mise au point print(nbPcs, " --- " , nom, " -- ", nom_sortie) #------------------------------------ #Lecture du texte f = open(nom, mode = "r", encoding="latin-1") texte = f.read() #-------------------------------------------- # Détermination de la taille du texte à traiter par chaque pcs # -------------------------------------------------------- taille1 = int(62 / nbPcs) taille2 = int(62 % nbPcs) carParPcs[0]=0 # Répartition du «reste» du texte entre les processus for j in range(1, nbPcs+1): if (taille2 > 0): carParPcs[j] = carParPcs[j-1] + taille1 + 1; taille2 = taille2 -1 else : carParPcs[j] = carParPcs[j-1] + taille1 #--------------------------------------------------------- # Positionnement du chronomètre pour évaluer la performance debut = datetime.now() #------------------------------------------------- # Initialisation et démarrage des fils d'exécution processus = [Process(target=decompte, args = (n, carParPcs[n], carParPcs[n+1]-1, texte, alpha, nbCar)) for n in range(0, nbPcs)] for p in processus : p.start() #------------------------------------------------- # Attente de la fin de tous les fils for p in processus : p.join() #------------------------------------------------- # Arrêt du chronomètre fin = datetime.now() # ------------------------------------------------- # Affichage du temps d'exécution delta = fin -debut print("Temps d'exécution en secondes = ", delta.total_seconds()) # ------------------------------------------------- # Sauvegarde du résultat dans fichier de sortie f = open(nom_sortie, mode = "w", encoding="utf-8") f.write("Occurences des caractères dans le texte : \n") for i in range(0,62): if ((i+1)%12 ==0): f.write("(") f.write(alpha[i]) f.write(":") f.write(str(nbCar[i])) f.write(")\n") else: f.write("(") f.write(alpha[i]) f.write(":") f.write(str(nbCar[i])) f.write("),")