Python multiprocessing.pool在执行并行计算时被卡住

Python multiprocessing.pool在执行并行计算时被卡住,python,numpy,multiprocessing,Python,Numpy,Multiprocessing,(这是在Ubuntu 14.02上使用python 2.7.6) 解决的问题: 当j=2时,我的重_计算函数出错,因此代码无法给出答案。这不是多重处理的问题 但是,尽管代码现在可以正常工作,但当我使用multiprocessing.dummy而不是multiprocessing时,它会报告一个错误。这个错误和我在附加部分写的一样。我认为这不是一个致命的错误,否则代码根本无法工作。我可以忽略它吗 补充: 我使用multiprocessing.dummy进行调试 当processs>1(例如proc

(这是在Ubuntu 14.02上使用python 2.7.6)

解决的问题:

当j=2时,我的重_计算函数出错,因此代码无法给出答案。这不是多重处理的问题

但是,尽管代码现在可以正常工作,但当我使用multiprocessing.dummy而不是multiprocessing时,它会报告一个错误。这个错误和我在附加部分写的一样。我认为这不是一个致命的错误,否则代码根本无法工作。我可以忽略它吗

补充:

我使用multiprocessing.dummy进行调试

当processs>1(例如processs=2)时,pool.map一开始代码就退出,并出现错误:

Traceback (most recent call last):
  File "binfit1.py", line 81, in <module>
    pool.map(multifit_star,parm)
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 558, in get
    raise self._value
IndexError: list index out of range
当我在终端上运行这段代码时,它可以很好地用于几个进程,但随后会被困在pool.map(f_star,parm)中的某个地方。例如,如果我设置k=3,这意味着由f(I,j)打印的最后一个temp的长度应为3*3=9,则代码将在temp的长度仅为6时停止。它给出的6个结果是正确的,但它从未给出其他3个结果

由于执行从未结束,我必须重新启动终端。有什么问题吗

提前感谢,

真诚地


Schur

parm
包含一个空列表作为第一个元素(
parm=[[]]
),因此辅助进程中应该存在异常。为了进行调试,我经常尝试将mutliprocessing.dummy导入为mp(使用线程)如果您的
繁重的计算
函数将其大部分时间花在numpy上,那么甚至可能会有与实际多处理相当的性能。什么是
iter
?最好使用另一个变量名而不是此关键字。尝试将
parm
初始化为
[]
。除第一个元素是空列表外,其他每个元素都是两个元素的列表。正如@janbrohl所说,函数
f
需要两个参数,而不是0个参数。@janbrohl谢谢。那是打字错误。我已经改正了。
import numpy as np
import multiprocessing as mp
def f(i,j):
    result = heavy_calculation(i,j)  
    result_star = np.array([result])
    # save the result in a certain file
    lock.acquire()
    try:
        temp = np.load('result.npy')
        temp = np.append(temp,result_star,axis=0)
    except:
        temp = result_star
    print temp
    np.save('result.npy',temp)
    lock.release()
def f_star(x):
    return f(*x)
if __name__=='__main__':
    k = 3
    PROCESSES = 4  #I have 8 cores in my computer
    lock = mp.Lock()
    parm = []
    for m in range(0,k):
        for n in range(0,k):
            parm.append([m,n])
    pool = mp.Pool(processes=PROCESSES)
    pool.map(f_star,parm)            
    pool.close()
    pool.join()
    final_result = np.load('result.npy')
    print final_result