Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python的多处理/线程处理会在处理了一半文件后导致分段错误_Python_Numpy_Python Multiprocessing - Fatal编程技术网

python的多处理/线程处理会在处理了一半文件后导致分段错误

python的多处理/线程处理会在处理了一半文件后导致分段错误,python,numpy,python-multiprocessing,Python,Numpy,Python Multiprocessing,我正在开发一个程序,它需要处理不同长度的文件(200 MB->1.5 GB),并希望通过使用多处理/多线程来加快处理速度。 在整个过程减慢并且只有一个或两个过程仍在运行之前,这种方法一直都很有效。 我研究了可能的原因。增加堆堆栈没有帮助。 这些进程在很大程度上使用了numpy,所以我认为这可能与CPython有关。但在寻找答案时运气不佳 代码如下: startPD,endPD,startHC,endHC = 0,10,0,10 threadlistPD = [] threadlistHC =

我正在开发一个程序,它需要处理不同长度的文件(200 MB->1.5 GB),并希望通过使用多处理/多线程来加快处理速度。 在整个过程减慢并且只有一个或两个过程仍在运行之前,这种方法一直都很有效。 我研究了可能的原因。增加堆堆栈没有帮助。 这些进程在很大程度上使用了numpy,所以我认为这可能与CPython有关。但在寻找答案时运气不佳

代码如下:

startPD,endPD,startHC,endHC = 0,10,0,10

threadlistPD = []
threadlistHC = []

procs = []

for i in range(5):

    if i <= 4:

        no = i + 1
        filelistPDtemp = filelistPD[startPD:endPD]
        namelistPDtemp = namelistPD[startPD:endPD]

        namePD = "Test Group "+str(i)
        procPD = Process(target=analyseFolder, name=namePD, args=(pathPD, filelistPDtemp, namelistPDtemp, True))
        procs.append(procPD)
        procPD.start()

        startPD += 10
        endPD += 10
    if i <= 3:

        no = i +5
        filelistHCtemp = filelistHC[startHC:endHC]
        namelistHCTemp = namelistHC[startHC:endHC]
        nameHC = "Control Group "+str(i)
        procHC = Process(target=analyseFolder, name=nameHC, args=(pathHC, filelistHCtemp, namelistHCTemp, True))
        procs.append(procHC)
        procHC.start()

        endHC += 10
        startHC +=10
    if i == 4:
        no = i + 5
        nameHC = "Control Group "+str(i)
        procHC = Process(target=analyseFolder, name=nameHC, args=(pathHC, filelistHCtemp, namelistHCTemp, True))
        procs.append(procHC)
        procHC.start()

for p in procs:
    p.join()
startPD,endPD,startHC,endHC=0,10,0,10
threadlistPD=[]
threadlistHC=[]
过程=[]
对于范围(5)中的i:

如果我是你,你可能会创建比你有处理器/核心更多的进程/线程?除了使CPU过载之外,每种情况都会消耗内存,因此如果内存过多,可能会耗尽内存,而这些内存通常不会得到正确处理。在C级(例如,在numpy中),一个
malloc()
将只返回NULL,对该地址的任何访问都将导致segfault。是的,我只有八个内核可用。我会改变这一点,看看这是否解决了问题。然而,最让我困惑的是,它甚至在这之前就变得更慢了。好吧,八个内核可能足以装载四个进程。其他的东西也可能在主机上运行,需要一些CPU时间(台式机等)。您是否创建的进程/线程比您的处理器/内核多?除了使CPU过载之外,每种情况都会消耗内存,因此如果内存过多,可能会耗尽内存,而这些内存通常不会得到正确处理。在C级(例如,在numpy中),一个
malloc()
将只返回NULL,对该地址的任何访问都将导致segfault。是的,我只有八个内核可用。我会改变这一点,看看这是否解决了问题。然而,最让我困惑的是,它甚至在这之前就变得更慢了。好吧,八个内核可能足以装载四个进程。其他东西也可以在主机上运行,需要一些CPU时间(台式机等)。