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