【问题标题】:Why does pool.map(func,argument) returns ValueError : need more than 1 value to unpack为什么 pool.map(func,argument) 返回 ValueError :需要超过 1 个值才能解包
【发布时间】:2017-05-13 11:13:05
【问题描述】:

我正在尝试在我的 CPU 上的多个内核上运行 python 函数,但我不断收到此错误消息,提示“需要超过 1 个值才能解包”。

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

类似的东西

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)

谁能帮助我为什么会出现这个错误以及有什么可能的方法来解决这个错误

【问题讨论】:

  • 如果您在单独的行上执行arg.append(img1) 然后arg.append(img2) 是否有效?我认为您的论点可能是 ((img1, img2)) 而不是 (img1, img2) 这是您的函数所期望的?
  • 需要在 map 函数中传递的参数必须是一些可迭代的,如果你仔细观察每个进程,参数会被划分为更多的占位符,如 list_obj[0]、list_obj[1] 等。我的程序接受元组形式的参数,例如 (img1,img2)。
  • 你在哪一行得到错误?
  • 我在这里遇到错误:results = pool.map(func,arg)
  • 对这些参数进行调试打印,以验证是否有多个值需要解压。

标签: python multiprocessing pool


【解决方案1】:

我无法提供帮助,但这是一个不会产生错误并且似乎可以正确运行 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)

也许你会在一些小的东西上构建一些东西,直到它坏掉 - 然后你有代码可以分享并获得帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多