我尝试使用以下Python代码(使用多重处理库):
i
但是在执行时,出现以下错误:
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()
我尝试使用yield生成器,但仍然出现相同的错误。
我想把这部分代码作为工作。如果有人有想法或建议,可以告诉它。
致谢