Hinterlassen Sie eine Notiz, da der Wert beim Übergeben von Variablen zwischen Python-Multiprozessen nicht übergeben werden konnte
Definieren Sie vier Funktionen (f1, f2, f3, f4) und führen Sie jede Funktion in einem separaten Prozess aus. Jede Funktion hängt einen Wert an und bestätigt den Mehrwert des letzten Hauptprozesses.
NG
Die zum Speichern von Variablen definierte Testliste ist ein Speicherplatz, der nur im Hauptprozess vorhanden ist. Es scheint also, dass Referenzaktualisierungen nicht von einem anderen Prozess vorgenommen werden können.
--Programm
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)
--Ergebnis
result: []
OK
Verwenden Sie den Manager, um Variablen zu übergeben. Legen Sie die Liste als Argument fest und übergeben Sie Daten zwischen Prozessen. Dies ermöglicht es, den Wert von jeder Funktion zu aktualisieren und ihn vom Hauptprozess aus zu überprüfen.
--Programm
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)
--Ergebnis
result: ['f1', 'f2', 'f3', 'f4', 'f1', 'f2', 'f3', 'f4', 'f1', 'f2', 'f3', 'f4']
Recommended Posts