2017-05-13 2 views
0

Ich versuche, eine Python-Funktion auf mehreren Kernen auf meiner CPU auszuführen, aber ich bekomme immer den Fehler, der sagt "brauche mehr als 1 Wert zum Auspacken '.Warum gibt pool.map (func, argument) ValueError zurück: benötigt mehr als 1 value zum Entpacken

Ich übergebe zwei Argumente zu Map-Funktion Das erste Argument ist meine Funktion, die ich auf mehreren Kernen ausführen soll und das zweite Argument ist eine Liste von Tupel, die ich als ein Argument an meine Funktion übergeben möchte.

so etwas wie diese

def func(list_obj): 
    temp = list_obj[0] 
    img = list_obj[1] 


arg = list() 
arg.append((img1,img2)) 

pool = multiprocessing.Pool(processes = 2) 
results = pool.map(func,arg) 
print (results) 

Kann jemand bitte helfen Sie mir, warum soll ich diesen Fehler und welche Art und Weise ist es, diesen Fehler zu lösen

+0

Wenn Sie 'arg.append (img1)' dann 'arg.append (img2)' in separaten Zeilen tun das funktioniert? Ich denke, Ihr Argument könnte "((img1, img2))" im Gegensatz zu "(img1, img2)" lauten, was erwartet Ihre Funktion? –

+0

Die Argumente, die in der Map-Funktion übergeben werden müssen, müssen iterierbar sein. Wenn Sie genau nach jedem Prozess suchen, wird das Argument in weitere Platzhalter wie list_obj [0], list_obj [1] usw. aufgeteilt eines Tupels wie (img1, img2). –

+0

In welcher Zeile wird der Fehler angezeigt? –

Antwort

0

Ich werde nicht zu helfen, die Lage sein, aber hier ist ein minimaler Code, der die map ordnungsgemäß keinen Fehler erzeugen und zu laufen scheint (aber ich weiß nicht, wie die Ergebnisse zurückgegeben werden sollen):

import multiprocessing 

results = [] 

def func(list_obj): 
    print(list_obj) 
    temp = list_obj[0] 
    img = list_obj[1] 
    results.append({"temp":temp, "img":img}) 
    return True 


if __name__=="__main__": 

    iterable = list() 
    iterable.append(("some",123)) 
    iterable.append(("data",456)) 
    iterable.append(("to",789)) 
    iterable.append(("play",789)) 
    iterable.append(("with","0ab")) 
    print(iterable) 


    pool = multiprocessing.Pool(processes = 2) 
    pool.map(func, iterable) 
    print(results) 

M Vielleicht wirst du irgendwo etwas erreichen, indem du auf etwas Kleines aufbaust, das funktioniert, bis es kaputt geht - dann hast du Code zu teilen und Hilfe zu bekommen.

Verwandte Themen