我需要计算涉及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>');
所以也许我只是没有正确使用它?可能是竞争条件?有什么想法吗?