将列表输入作为单个参数传递给Python 3.X中的starmap

时间:2016-05-16 17:19:28

标签: python multiprocessing python-multiprocessing python-3.5

我对python很新,所以如果这里有一些愚蠢的问题,我会提前道歉。

我试图尝试并行化代码,为了保持半模块化,我需要在Pool中将几个标量值和一个列表从一个函数传递到另一个函数,如下所示:

with Pool(nProcs) as p:
        out1= np.array(p.starmap(function1, product(arg1, arg2, ... argN)), dtype=object)
        T_in = [out1[0,3]]
        P_in = [out1[0,5]]
        XALL = [out1[0,6]]
        out2 = np.array(p.starmap(function2, product(P_in, T_in, ..., XALL)), dtype=object)

关注的是out2线的输入。基本上我传递单个值和列表的组合。这些列表中的大多数都通过产品传递,以便我可以迭代它们,但是我需要从function1输出到power2中获取一个列表,而不需要产品迭代每个值(即将XALL作为"块") 。显然,我上面列出的方式就像任何其他列表一样对待XALL,但是如果我像这样弹出XALL产品:

result = np.array(p.starmap(psr, [product(Ppsr_in, T_rise_list, Eff_list, T_tol, Tpsr_in), XALL]), dtype=object)

这也不起作用,因为starmap抱怨我没有为function2提供足够的论据。

如何将此数组传递给function2并将其视为给定进程中的单个可迭代?

由于

修改

作为澄清,P_in和T_in是标量值(它们也可以是列表,并且在此代码的早期版本中也是如此),但XALL是包含我需要传递给的一系列值的列表一个函数,但不想迭代各个值。这些值需要被视为单个数组,因为数组中的每个值代表单个化学物质的摩尔分数(在整个代码的上下文中)。如果我将其传递为仅XALL产品,则会将其视为任何其他列表,并将每个值视为要运行的不同案例。我只需要将这些信息从一个功能转移到另一个功能。

1 个答案:

答案 0 :(得分:0)

听起来你只是想要这个:

with Pool(nProcs) as p:
    out1= np.array(p.starmap(function1, product(arg1, arg2, ... argN)), dtype=object)
    T_in = [out1[0,3]]
    P_in = [out1[0,5]]
    XALL = [out1[0,6]]
    def function2_with_XALL(p, t, ...):
        function2(p, t, ..., XALL)
    out2 = np.array(p.starmap(function2_with_XALL, product(P_in, T_in, ...)), dtype=object)

如果不是这样,那么我坚持要通过写下循环来解释你想要它做什么。