使用python多进程、sympy和numpy时的竞争条件?

2024-10-01 15:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要计算大量的涉及矩阵的sympy表达式的数值,并希望用multiprocessing作为进程的种子。在

具体地说,我正在做

monomialsLength = len(flatted_monomials)
self.monomialvector = []
pool = multiprocessing.Pool()
lock = multiprocessing.Lock()
monomials = pool.imap(partial(monomialmatrix, old=old, new=new), flatted_monomials)
for i, monom in enumerate(monomials, 1):
    lock.acquire()
    self.monomialvector.append(monom)
    sys.stdout.write("\r\x1b[K processed "+str(i)+" of "+str(monomialsLength)+" monomials in "+str(time.time()-time0)+" seconds ")
    sys.stdout.flush()
    lock.release()
pool.close()
pool.join()

其中monomialmatrixsympy.lambdify周围的包装函数

^{pr2}$

oldnew分别是出现在monomial中的sympy矩阵和它们将被替换的相应的numpy数组的列表。在

问题是,上面的代码似乎只是在几次迭代之后暂停,并行进程消耗了100%的CPU(Python2.7.6)。在

我怀疑是种族状况?这是我第一次使用multiprocessing所以也许我没有正确使用它?可能是比赛状态?有什么想法吗?在


Tags: selflocknew进程矩阵multiprocessingoldpool

热门问题