【问题标题】:Pool name error with multiple arguments具有多个参数的池名称错误
【发布时间】:2015-05-20 03:04:04
【问题描述】:

我正在尝试使用多处理模块在 Python 2.7 中并行化一个函数。不幸的是,在我的池函数中,我在传递多个参数时似乎遇到了错误。我试图将它们打包为元组列表、类和列表列表,所有这些似乎都给了我以下错误:

  File "plot_gfs.py", line 132, in plot_data
results = pool.map(plot_var,args)
File "/opt/Python2.7/lib/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/opt/Python2.7/lib/python2.7/multiprocessing/pool.py", line 558, in get
raise self._value
AttributeError: 'str' object has no attribute 'name'

这是我的并行函数代码:

def plot_data(lats, lons, bounds):

    lons2, lats2 = np.meshgrid(lons, lats)

    x, y = basem(lons2, lats2)

    pool = mp.Pool(4)
    args = [('prmslmsl', 0, 'jet', 950, 1050, i, x, y, bounds)
            for i in range(80)]
    results = pool.map(plot_var, args)
    pool.close()
    pool.join()

注意:plot_var 函数标签是:

def plot_var(var_in):

【问题讨论】:

    标签: python python-2.7 python-multiprocessing


    【解决方案1】:

    尝试将参数作为元组传递:

    results = pool.map(plot_var, (args))
    

    或者,取决于您的使用情况:

    results = [pool.map(plot_var, a) for a in agrs]
    

    【讨论】:

    • 将参数作为元组传递会产生相同的错误。我正在努力使您的第二个解决方案正常工作,但它似乎正在单独传递我的元组的每个值(因此它正在传递元组 1 的元素 1、元组 1 的元素 2 等)
    • 我知道为什么您的第二个解决方案不起作用 - 它与我的用法不符。我有一个元组列表,我正在尝试将 plot_var 映射到每个元组。
    • args 是一个元组列表,对吗?如果是这样,您应该能够对其进行迭代以获得元组,例如args = [(1,2,3), (4,5,6)], >>> [a for a in args] Out[4]: [(1, 2, 3), (4, 5, 6 )]
    • 您能否提供该函数的标题以指示其用法?
    • 我很抱歉——第一个例子确实成功了——我的目标函数有一个新错误。对不起。已接受答案。
    猜你喜欢
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2014-05-13
    • 2017-01-26
    • 1970-01-01
    • 2014-07-21
    相关资源
    最近更新 更多