为什么pool.map(func,argument)返回ValueError:需要多个值才能解包

问题描述:

我想在CPU上的多个核心上运行一个python函数,但是我一直得到这个错误,说'需要多于1价值解开'。为什么pool.map(func,argument)返回ValueError:需要多个值才能解包

我传递两个参数映射函数第一个参数是我的函数,我想在多个核心上运行,第二个参数是我想作为参数传递给我的函数的元组列表。

像这样

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) 

能有人帮我,为什么我会收到这个错误,什么可能的方式是有没有办法解决这个错误

+0

如果你使用'arg.append(img1)',那么'arg.append(img2)'在不同的行上工作吗?我认为你的论点可能是'((img1,img2))',而不是'(img1,img2)',这正是你的功能所期待的? –

+0

需要在map函数中传递的参数必须是可迭代的,如果仔细观察每个进程,参数会被分成更多的占位符,如list_obj [0],list_obj [1]等。我的程序将参数以表单形式像(img1,img2)这样的元组。 –

+0

你得到的错误是哪一行? –

我不能帮助,但在这里是不产生错误,似乎正常运行map最小码(但我不知道结果如何应该退还):

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) 

中号aybe你会在某个地方建立一些小的东西,直到它破裂 - 然后你就有了分享和获得帮助的代码。