使用python多处理,sympy和numpy的竞争条件?

时间:2016-04-21 11:04:55

标签: python numpy multiprocessing sympy

我需要计算涉及sympy矩阵的大量sympy.lambdify个大型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() 来启动流程。

具体地说我正在做

monomialmatrix

其中sympy.lambdify是围绕def monomialmatrix(monomial, old=None, new=None): return np.array(sympy.lambdify(old, monomial, modules="numpy")(*new))

的包装函数
old

new以及sympy分别是monomial中出现的numpy矩阵列表以及要替换它们的相应multiprocessing数组

问题是上面的代码在经过几次迭代后似乎停滞不前,并行进程占用了所有CPU的100%(Python 2.7.6)。

我怀疑有竞争条件?这是我第一次使用var urlarray = ['http://www.exa.com', 'http://www.example.com', 'http://www.test.org', 'http://www.test.info'], providers = {}, biggest = []; urlarray.forEach(function (a, i) { var provider = a.split(".")[1]; providers[provider] = providers[provider] || []; providers[provider].push(a); if (!i || providers[biggest[0]].length < providers[provider].length) { biggest = [provider]; return; } if (providers[biggest[0]].length === providers[provider].length) { ~biggest.indexOf(provider) || biggest.push(provider); } }); document.write(biggest); document.write('<pre>' + JSON.stringify(providers, 0, 4) + '</pre>');所以也许我只是没有正确使用它?可能是竞争条件?有什么想法吗?

0 个答案:

没有答案