j'ai essayé d'exécuter le code multitraitement suivant:multitraitement Ne pas tenir Résultats
import multiprocessing
class test(multiprocessing.Process):
def __init__(self, name):
multiprocessing.Process.__init__(self)
self.name = name
self.finished = False
def run(self):
print("executed")
self.finished = True
test_list = []
test_list.append(test('first'))
test_list.append(test('second'))
for t in test_list:
t.start()
for t in test_list:
t.join()
for t in test_list:
print(t.finished)
et obtenir les résultats:
executed
executed
False
False
Les sorties False
semblent étranges. J'ai mis l'attribut finished
à True
dans la méthode run
, et les sorties executed
montrent que la méthode run
a été exécutée. Et, si j'ajoute une ligne print(self.finished)
immédiatement après self.finished=True
dans la méthode run
, la sortie serait True
. Pourquoi l'attribut de classe finished
change-t-il après la fin du multitraitement?
Merci!
t.finish est mis à jour dans un autre processus, et non dans le processus principal. Voir: https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes – gammazero