[Python] Übergabe von Werten während der Mehrfachverarbeitung

Hinterlassen Sie eine Notiz, da der Wert beim Übergeben von Variablen zwischen Python-Multiprozessen nicht übergeben werden konnte

Implementierung

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

[Python] Übergabe von Werten während der Mehrfachverarbeitung
Python: Tips-Swap-Werte
UnicodeEncodeError: 'cp932' während des Python-Scrapings
Werte in Python austauschen
Python --Überprüfen Sie den Wertetyp
Übertragen Sie Parameterwerte in Python
Python-Parallelverarbeitung (Multiprocessing und Joblib)
pip install mysql-Handling Fehler während Python
Ausnahmebehandlung während der Python-API-Kommunikation
[Python] So tauschen Sie Array-Werte aus
Führen Sie Python Script während CodeSys # RunTime aus