Python多进程中的pool.map怎样处理多个参数?

问题:

在Python多处理库中,是否有一个支持多个参数的pool.map的变体?

text = "test"
def harvester(text, case):
    X = case[0]
    return text+ str(X)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=6)
    case = RAW_DATASET
    pool.map(harvester(text,case),case, 1)
    pool.close()
    pool.join()

回答:

我最初的想法是使用partial,正如J.B.塞巴斯蒂安所指出的,partial在这个例子中,在Python> = 2.7中工作,所以我发布了这一点,并注意到它在2.6中不起作用。
还要注意,在上面的代码中,你传递了harvester(text, case)的结果,而不是函数harvester本身。此外,你没有返回任何东西;你必须返回一些东西才能使它有用。
我假设text是应该映射的变量,而情况为映射函数提供有关整个序列的额外信息。这简单地将case中的每个元素映射到case[i] + case[0]。这与你做的有点不同,但我发现这个例子更清楚了:

from functools import partial

def harvester(text, case):
    X = case[0]
    return text + str(X)

partial_harvester = partial(harvester, case=RAW_DATASET)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=6)
    case_data = RAW_DATASET
    pool.map(partial_harvester, case_data, 1)
    pool.close()
    pool.join()

J.F. Sebastian的答案更为通用,因为它允许您为每个调用指定唯一的参数。但是对于所有调用,其中一个参数保持不变,但使用partial更简单。

Code问答: http://codewenda.com/topics/python/
Stackoverflow: Python multiprocessing pool.map for multiple arguments

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 1