Bonjour à tous,
Je m'essaie au calcul parallèle depuis quelques jours et je rencontre un comportement inattendu. J'utilise le package multiprocessing standard sur python 2.7, et je tente d'appeler une méthode en parallèle. Cette méthode devra remplir un dictionnaire de données.
Un code simpliste dans un fichier à part fonctionne très bien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 def push_in_array(self,array,i,val): print 'push %s in %s' %(i,val) n = 9999 while n > 0: r = sqrt(n) n = n-1 array[i] = val def Run(self) : manager = Manager() d = manager.dict() t0 = time() if self.multi: # Multiprocessing Mode print "Multiprocessing computation..." p = {} for i in range(self.nb): p[i] = Process(target = self.push_in_array, args=(d,i,5,)) p[i].start() for i in range(self.nb): p[i].join() tp = round(time() - t0, 3) print "Time elapsed in multiprocessing computation: %.2f\n" % tp else: # Serial Mode print "Serial computation..." for i in range(self.nb): push_in_array(d,i,5) tp = round(time() - t0, 3) print "Time elapsed in serial computation: %.2f\n" % tp print dl'intégration de ce code dans ma librairie entraine par contre un comportement étrange, le premier proc reprend depuis le début du programme à son start(), puis revenu à l'endroit du fork(), le nouveau fils recommence encore, et encore ... et le code n'avance pas finalement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Multiprocessing computation... push 0 in 5 push 1 in 5 push 2 in 5 push 4 in 5 push 3 in 5 Time elapsed in multiprocessing computation: 0.89 {0: 5, 1: 5, 2: 5, 3: 5, 4: 5}
Avez vous déja rencontrer ce genre de problème ?
Partager