Laisser une note car la valeur n'a pas pu être transmise lors du passage de variables entre multi-processus Python
Définissez quatre fonctions (f1, f2, f3, f4) et exécutez chaque fonction dans un processus distinct. Chaque fonction ajoute une valeur et confirme la valeur ajoutée du dernier processus principal.
NG
La liste de test définie pour stocker les variables est un espace mémoire qui n'existe que dans le processus principal, il semble donc que les mises à jour de référence ne peuvent pas être effectuées à partir d'un autre processus.
--Programme
from multiprocessing import Process
from multiprocessing import Manager
testlist=[]
def f1():
#print("function f1")
testlist.append("f1")
def f2():
#print("function f2")
testlist.append("f2")
def f3():
#print("function f3")
testlist.append("f3")
def f4():
#print("function f4")
testlist.append("f4")
if __name__ == '__main__':
for i in (0,1,2):
p1 = Process(target=f1, args=())
p1.start()
p2 = Process(target=f2, args=())
p2.start()
p3 = Process(target=f3, args=())
p3.start()
p4 = Process(target=f4, args=())
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
p1.terminate()
p2.terminate()
p3.terminate()
p4.terminate()
print("")
print("result: ",testlist)
--Résultat
result: []
OK
Utilisez Manager pour transmettre des variables. Définissez la liste comme argument et passez les données entre les processus. Cela permet de mettre à jour la valeur de chaque fonction et de la vérifier à partir du processus principal.
--Programme
from multiprocessing import Process
from multiprocessing import Manager
def f1(dummy,testlist,num):
#print("function f1")
testlist.append("f1")
def f2(dummy,testlist,num):
#print("function f2")
testlist.append("f2")
def f3(dummy,testlist,num):
#print("function f3")
testlist.append("f3")
def f4(dummy,testlist,num):
#print("function f4")
testlist.append("f4")
if __name__ == '__main__':
alllist=[]
with Manager() as manager:
for i in (0,1,2):
d=manager.dict()
l=manager.list([])
p1 = Process(target=f1, args=(d,l,4*i+0))
p1.start()
p2 = Process(target=f2, args=(d,l,4*i+1))
p2.start()
p3 = Process(target=f3, args=(d,l,4*i+2))
p3.start()
p4 = Process(target=f4, args=(d,l,4*i+3))
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
p1.terminate()
p2.terminate()
p3.terminate()
p4.terminate()
alllist.extend(l)
print("")
print("result: ",alllist)
--Résultat
result: ['f1', 'f2', 'f3', 'f4', 'f1', 'f2', 'f3', 'f4', 'f1', 'f2', 'f3', 'f4']
Recommended Posts