Python 在使用多处理和 itertools 时传递多个值

Python pass multiple values while using multiprocessing and itertools

提问人:Valuex 提问时间:9/25/2019 最后编辑:Bill PValuex 更新时间:9/25/2019 访问量:100

问:

我正在尝试使用多处理对 itertools 收集的组合进行一些计算。
这是我正在做的事情的简单版本:

import multiprocessing
import itertools
def func(comb):
    x=list(comb)[0]
    y=zs[x]
    return x+y
if __name__ == '__main__':
    cores=multiprocessing.cpu_count()
    pool=multiprocessing.Pool(processes=cores)
    xs=range(50)
    ys=range(50)
    zs=[iy+1 for iy in ys]
    for r in pool.imap(func,itertools.product(xs,ys)):
        print(r)

但它提出了一个错误:

NameError:未定义名称“zs”

使用时如何传递?zsfuncitertools.product

非常感谢您的任何评论。

多处理 python-itertools

评论

0赞 Ahndwoo 9/25/2019
您需要传递给 .打电话也可能有效,但我不是 100% 确定。zsfuncglobal zsfunc
0赞 BlackJack 9/26/2019
@Ahndwoo 不,至少不是在每个平台上,因为模块级别是在主文件保护中定义的,而不是在生成的子函数中的窗口上执行的。但无论如何,全局变量都是一个坏主意。函数/方法应该获得除常量之外的所有内容作为参数。zs
0赞 Ahndwoo 9/26/2019
@BlackJack我想可能是这样。谢谢!

答:

2赞 Dev Khadka 9/25/2019 #1

您可以使用分部函数来设置函数的部分参数,如下所示

from functools import partial

def func(comb, zs):
    print(comb, zs)

pfunc = partial(func, zs="abc")

pfunc("123")

# 123 abc