我对在Python中使用多处理有点疯狂。
让我简单解释一下。在
我有一个图像目录。图像属于内部类别。我总共有十个类别,每一个类别有几十张图片。在
简单地说,我的程序的目标是每类随机抽取三张图像,并执行一个大的计算,十次对应于十个不同的参数。在
程序运行良好,但需要时间。这就是为什么我想用多处理来并行化它。在
我的目标是能够使用我的10个核心,在每个核心,一个计算使用一个参数。在
我有一个大函数,有两个for循环。在
这里是主文件:def main():
#Array which contains the 10 parameters to tests
parameters = ['param1','param2',...,'param10']
pool = mp.Pool(processes=2) #I put a small number in purpose
params = (list_of_random_objects, trained_dataset, name_dataset)
#List of randoms objects is an array [('category_i', ['path_image_1', 'path_image_2','path_image_2'])]
#trained_dataset is a path and name_dataset is the name of the dataset
func = partial(automatic_processing, params)
pool.map(func, parameters)
pool.close()
pool.join()
if __name__ == '__main__':
main()
这里的大功能(我让最重要的部分):
^{pr2}$
所以程序正在工作,但是在第一个循环的末尾,我有一个弹出消息说“Python突然崩溃”。程序继续运行。在
我注意到一些事情可能会给你一些关于我的问题的提示。在如果我对绘图部分进行了注释,它就起作用了
如果我让绘图部分,我的程序在类别的前三个对象之后停止,并继续使用相同的三个对象。就像我的第一个循环被无限期地卡在第一个项目上。在
对于绘图部分,我使用Matplotlib。在
这里的错误,我从报告中得到的。在Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000110
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [0]
VM Regions Near 0x110:
-->
__TEXT 0000000102081000-0000000102083000 [ 8K] r-x/rwx SM=COW /usr/local/Cellar/python3/3.5.2_3/Frameworks/Python.framework/Versions/3.5/Resources/Python.app/Contents/MacOS/Python
Application Specific Information:
*** multi-threaded process forked ***
crashed on child side of fork pre-exec
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libdispatch.dylib 0x00007fff94c8c041 _dispatch_root_queue_push_override + 204
1 libxpc.dylib 0x00007fff94f097ae _xpc_connection_activate_if_needed + 227
2 libxpc.dylib 0x00007fff94efc5ba xpc_connection_resume + 64
3 com.apple.CoreFoundation 0x00007fff7f6913fb -[_CFXPreferences _copyDaemonConnectionSettingUpIfNecessaryForRole:] + 427
4 com.apple.CoreFoundation 0x00007fff7f691487 -[_CFXPreferences withConnectionForRole:performBlock:] + 23
5 com.apple.CoreFoundation 0x00007fff7f6619f7 __80-[CFPrefsSearchListSource alreadylocked_generationCountFromListOfSources:count:]_block_invoke + 199
6 com.apple.CoreFoundation 0x00007fff7f661842 -[CFPrefsSearchListSource alreadylocked_generationCountFromListOfSources:count:] + 226
你能帮忙吗?我做错什么了吗?在
谢谢