Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在使用多处理和itertools时传递多个值_Python_Multiprocessing_Itertools - Fatal编程技术网

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

Python在使用多处理和itertools时传递多个值,python,multiprocessing,itertools,Python,Multiprocessing,Itertools,我正在尝试使用多重处理对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(pr

我正在尝试使用多重处理对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”

使用
itertools.product
时如何将
zs
传递到
func


非常感谢您的评论。

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

从functools导入部分
def func(梳,zs):
打印(梳,zs)
pfunc=部分(func,zs=“abc”)
pfunc(“123”)
#123美国广播公司

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

从functools导入部分
def func(梳,zs):
打印(梳,zs)
pfunc=部分(func,zs=“abc”)
pfunc(“123”)
#123美国广播公司

您需要将
zs
传递到
func
。在
func
中调用
global zs
也可以,但我不是100%确定。@Ahndwoo不,至少不是在每个平台上都可以,因为模块级的
zs
是在主文件保护中定义的,而不是在派生子进程的窗口上执行。但无论如何,全局变量是个坏主意。一个函数/方法应该得到它所需要的一切,而不仅仅是常数作为参数。@BlackJack我想可能是这样的。谢谢您需要将
zs
传递到
func
。在
func
中调用
global zs
也可以,但我不是100%确定。@Ahndwoo不,至少不是在每个平台上都可以,因为模块级的
zs
是在主文件保护中定义的,而不是在派生子进程的窗口上执行。但无论如何,全局变量是个坏主意。一个函数/方法应该得到它所需要的一切,而不仅仅是常数作为参数。@BlackJack我想可能是这样的。谢谢