Bienvenue sur IndexError.

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

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,514 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

...