(这是在Ubuntu 14.02上使用python 2.7.6)
解决问题:
当j = 2时,我的heavy_calculation函数出错了,因此代码无法给出答案。这不是多处理的问题。
但是,虽然代码现在可以正常工作,但是当我使用multiprocessing.dummy而不是多处理时它报告错误。错误与我在Addition part中写的相同。我认为这不是一个致命的错误,否则代码根本无法工作。我可以忽略它吗?
增加:
我使用multiprocessing.dummy进行调试。
当PROCESSES> 1(例如PROCESSES = 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
问题:
我想同时做一些繁重的计算,我使用多处理包。但是,multiprocessing.Pool会在计算时卡住。我的代码的简化版本是:
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
当我在终端上运行此代码时,它适用于多个进程,但随后卡在pool.map(f_star,parm)中的某个位置。例如,如果我设置k = 3,这意味着由f(i,j)打印的最后一个temp应该具有3 * 3 = 9的长度,代码将在temp的长度仅为6时停止它给出的6个结果是正确的,但它从未给出其他3个结果。
由于执行永远不会完成,我必须重新启动终端。有什么问题?
提前致谢,
此致
舒尔