【问题标题】:use Python to pass a list of objects as pool map arguments使用 Python 将对象列表作为池映射参数传递
【发布时间】:2019-10-07 17:50:29
【问题描述】:

我在使用 Python 多处理时遇到了问题,并且无法将对象列表作为 pool.map 参数传递。以下代码打印 [None, None] 而不是实际名称。有人能解释一下吗?

from multiprocessing import Pool

class Item:
  def __init__(self, firstname, lastname):
    self.firstname = firstname
    self.lastname = lastname

def get_items():
  items = []
  names = ['Joe Smith', 'Rick Harvard']

  for name in names:
      item = Item(name.split(' ')[0], name.split(' ')[1])
      items.append(item)

  return items

def f(name):
    print(name.firstname, name.lastname)
    
if __name__ == '__main__':
  p = Pool(16)
  print(p.map(f, get_items()))
  p.close()
  p.join()

【问题讨论】:

  • "print [None, None] ":这是正确的,你调用def f(...两次,def f(...返回两次@ 987654324@.
  • 但为什么没有打印出“Joe,Smith”和“Rick,Harvard”?
  • 你是不是说:print(name.... in def f(... 没有出现?

标签: python object multiprocessing pool


【解决方案1】:

print方法返回None,你调用了两次

把你的 f 函数改成

def f(name):
    return name.firstname, name.lastname

【讨论】:

  • 谢谢。工作。
猜你喜欢
  • 2012-07-13
  • 2017-02-07
  • 2022-07-27
  • 2018-05-05
  • 1970-01-01
  • 2011-01-20
  • 2023-03-04
  • 2022-06-23
  • 1970-01-01
相关资源
最近更新 更多