Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Probleme parallelisation code python avec Multiprocessing pool

+1 vote

J'ai un probleme a niveau de parallelisation avec multiprocessing pool en effet j'ai une fonction worker qui permet de lire un fichier texte f1 puis le rendre les lignes dans une list R (decoupage par ligne avec i est le nombre des lignes de fichiers environnement 92 lignes) puis je vais récuperer les valeurs de la liste par 2 valeurs et les enregister dans une autre liste X
donc je veux que le code soit executer en parallele a l 'aide de map ,quesque je doit faire pour que je puisse faire le parallelisme lors de la lecture ou l'enregistrement et qu'est que je dans le parametres p.map.

def worker(i):
    with open('F1.txt' , 'r') as f:
        R = [line.strip() for line in itertools.islice(f, 4,i)]
        for i, val in enumerate(R):
            X.append([val[i:i + 2] for i in range(len(val))])
    return X

if __name__ == '__main__':

    p = multiprocessing.Pool(processes=5)
    resultat = p.map(worker,range(1)) #qu est que je met ici ?
    p.close()
    p.join() 
demandé 7-Dec-2017 par ghailenemark (120 points)
edité 9-Dec-2017 par max

1 Réponse

+3 votes
 
Meilleure réponse

Ton code est inexact. En gros, il devrait faire quelque chose comme ceci :

N = 5

def worker(i):
    fp = open(...)
    for line in islice(fp, i, None, N):
        ...

pool = Pool(N)
result = pool.map(worker, range(N))

Apres, ce n'est pas forcément une bonne idée d'utiliser du multiprocessing pour faire de l'IO, mais c'est un autre sujet.

répondu 7-Dec-2017 par yoch (2,294 points)
sélectionné 8-Dec-2017 par ghailenemark

Merci beaucoup yoch ,est que tu peux me proposer une autre solution de parallelisme sachant que mon code ici est mieux détaillé

X = []
R = []

#lire le fichier F1 
with open('F1.txt' , 'r') as f:    
    #on va mettre dans la liste R le contenu de chaque ligne (qui va etre val dans le boucle) de fichier f de ligne 4 a 92
    R = [line.strip() for line in itertools.islice(f, 4,92)]

    #on va parcourir le tableau la liste R
    for i, val in enumerate(R):                   
            #on va mettre dans tab X les differents caracteres rassemblés 2 par 2 jusqu a la la fin de fichier
        X.append([val[i:i + 2] for i in range(len(val))])

le but de code est de calculer le nombre d'occurence de chaque 2 caractéres concatinés , bon je veux juste le paralellisme au niveau de lecture des lignes de fichiers et merci d'avance mon frére

...