首页 > 解决方案 > pool.map 函数出错:'ValueError:`x` 必须包含至少 2 个元素'

问题描述

我尝试使用以下 Python 代码(使用多处理库):

import multiprocessing as mp

def MAIN_LOOP(lll):
    global aa
    global bb
    aa, bb = 0,0
    if paramo == 3:
        C_ij = np.zeros((len(zrange), len(zrange)))
    C_ij_up = np.zeros((len(zrange), len(zrange)))
    C_ij_dw = np.zeros((len(zrange), len(zrange)))
    while aa < len(zrange):
        while bb <= aa:
            if paramo == 3:
                C_ij[aa][bb] = Pobs_C(zpm, zrange[aa], zrange[bb], h[2], Omega_m[2], Omega_DE[2], w0[2], wa[2], E_tab, R_tab, DG_tab, W_tab, l[lll], P_dd_C, R_tab(z_pk)) 
            C_ij_up[aa][bb] = Pobs_C(zpm, zrange[aa], zrange[bb], h[0], Omega_m[0], Omega_DE[0], w0[0], wa[0], E_tab_up, R_tab_up, DG_tab_up, W_tab_up, l[lll], P_dd_C_up, R_tab_up(z_pk))
            C_ij_dw[aa][bb] = Pobs_C(zpm, zrange[aa], zrange[bb], h[3], Omega_m[3], Omega_DE[3], w0[3], wa[3], E_tab_dw, R_tab_dw, DG_tab_dw, W_tab_dw, l[lll], P_dd_C_dw, R_tab_dw(z_pk))
            
            if aa != bb:
                if paramo == 3:
                    C_ij[bb][aa] = C_ij[aa][bb]
                C_ij_up[bb][aa] = C_ij_up[aa][bb]
                C_ij_dw[bb][aa] = C_ij_dw[aa][bb]
            bb=bb+1
        bb=0
        aa=aa+1
        
    if paramo == 3:
        aa, bb = 0,0 
        outF=open(CC_path[2]+"/COVAR_fid_"+str(l[lll]),'w')
        while aa < len(C_ij):
            while bb < len(C_ij):
                outF.write(str("%.16e" % C_ij[aa][bb]))
                outF.write(str(' '))
                bb=bb+1
            outF.write(str('\n'))
            bb=0
            aa=aa+1
        outF.close()
    
    aa, bb = 0,0            
    outU=open(CC_path[0]+"/COVAR_up_"+str(l[lll]),'w')
    outD=open(CC_path[3]+"/COVAR_dw_"+str(l[lll]),'w')
    while aa < len(C_ij_up):
        while bb < len(C_ij_up):
            outU.write(str("%.16e" % C_ij_up[aa][bb]))
            outU.write(str(' '))
            outD.write(str("%.16e" % C_ij_dw[aa][bb]))
            outD.write(str(' '))
            bb=bb+1
        outU.write(str('\n'))
        outD.write(str('\n'))
        bb=0
        aa=aa+1
    outU.close()
    outD.close()
    lll=lll+1
    
lll = range(len(l))
 
if __name__ == '__main__':
    pool = mp.Pool(12)
    pool.map(MAIN_LOOP, lll)
    pool.close()
    pool.join()

但在执行时,我收到以下错误:

Traceback (most recent call last):
  File "Photo_SAF_flat.py", line 412, in <module>
    pool.map(MAIN_LOOP, lll)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 253, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 572, in get
    raise self._value
ValueError: `x` must contain at least 2 elements.

我尝试使用带有产量的生成器,但仍然得到相同的错误。

我想让这部分代码工作。我该怎么做?

标签: python-2.7python-multiprocessing

解决方案


推荐阅读