Python退出意外地使用scipy.linalg.inv()运行并行进程

时间:2013-06-12 21:55:49

标签: python numpy crash parallel-processing

我尝试用Python运行multiprocessing s Pool的一些任务。所有似乎都应该工作,但是一行允许Python意外退出,它是行,它计算矩阵的逆矩阵。 (scipy.linalg.inv()

苹果错误日志打印

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000108

我很确定,它与逆变量有关,而不是与某些未知变量有关,因为如果我只是计算,退出也会发生:

la.inv(np.eye(n))

我认为它可能与事实有关,la.inv()使用多个线程。

注意:如果我在没有并行化的情况下运行代码,它当然有效。 AND 它也有效,如果我只是评论上面的那一行。

但是如果我运行一些测试代码,那么可以最大限度地减少问题:

import numpy as np
import scipy.linalg as la
from multiprocessing import Pool


class ParClass(object):
    def __init__(self):
        super(ParClass, self).__init__()

    def compute(self,x):
        self.x = la.inv(np.random.randn(1000,1000))
        return self


def runPar(x):
        method = ParClassifier()
        method.compute(x)
        return method.x

if __name__ == '__main__':
    pool = Pool(processes=4)
    result = pool.map(runPar, np.arange(1,100))

不会发生错误。那么为什么影响原始问题的孔过程的一行代码不会影响测试问题呢?这很奇怪,不过有人曾经遇到过这个吗?

编辑: np.linalg.solve()没有做得更好

0 个答案:

没有答案