【发布时间】:2018-03-09 12:55:27
【问题描述】:
我想实现一个递归并行算法,我希望一个池只创建一次,每个时间步都做一个工作,等待所有工作完成,然后再次调用进程,输入先前的输出,然后再次调用在下一个时间步相同,等等。
我的问题是我已经实现了一个版本,每次步骤我都会创建和终止池,但这非常慢,甚至比顺序版本还要慢。当我尝试实现一个在开始时只创建一次池的版本时,当我尝试调用 join() 时出现断言错误。
这是我的代码
def log_result(result):
tempx , tempb, u = result
X[:,u,np.newaxis], b[:,u,np.newaxis] = tempx , tempb
workers = mp.Pool(processes = 4)
for t in range(p,T):
count = 0 #==========This is only master's job=============
for l in range(p):
for k in range(4):
gn[count]=train[t-l-1,k]
count+=1
G = G*v + gn @ gn.T#==================================
if __name__ == '__main__':
for i in range(4):
workers.apply_async(OULtraining, args=(train[t,i], X[:,i,np.newaxis], b[:,i,np.newaxis], i, gn), callback = log_result)
workers.join()
X 和 b 是我想直接在主内存中更新的矩阵。
这里出了什么问题,我得到了断言错误?
我可以用池实现我想要的吗?
【问题讨论】:
标签: python python-3.x parallel-processing python-multiprocessing python-pool