为什么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)
能有人帮我,为什么我会收到这个错误,什么可能的方式是有没有办法解决这个错误
答
我不能帮助,但在这里是不产生错误,似乎正常运行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你会在某个地方建立一些小的东西,直到它破裂 - 然后你就有了分享和获得帮助的代码。
如果你使用'arg.append(img1)',那么'arg.append(img2)'在不同的行上工作吗?我认为你的论点可能是'((img1,img2))',而不是'(img1,img2)',这正是你的功能所期待的? –
需要在map函数中传递的参数必须是可迭代的,如果仔细观察每个进程,参数会被分成更多的占位符,如list_obj [0],list_obj [1]等。我的程序将参数以表单形式像(img1,img2)这样的元组。 –
你得到的错误是哪一行? –