多处理Python—Python突然退出,但程序仍在继续
我对在Python中使用多处理有点着迷。 让我简单解释一下 我有一个图像目录。而图像是内部类别。我一共有十个类别,每个类别有几十张图片 简单地说,我的程序的目标是每个类别随机获取三张图像,并执行一个大的计算,十次对应十个不同的参数 这些程序运行良好,但需要时间。这就是为什么我想使用多处理并行化它 目标是能够使用我的10个核心,在每个核心中,使用一个参数进行计算 我有一个大函数,它有两个for循环 这里是主文件:多处理Python—Python突然退出,但程序仍在继续,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我对在Python中使用多处理有点着迷。 让我简单解释一下 我有一个图像目录。而图像是内部类别。我一共有十个类别,每个类别有几十张图片 简单地说,我的程序的目标是每个类别随机获取三张图像,并执行一个大的计算,十次对应十个不同的参数 这些程序运行良好,但需要时间。这就是为什么我想使用多处理并行化它 目标是能够使用我的10个核心,在每个核心中,使用一个参数进行计算 我有一个大函数,它有两个for循环 这里是主文件: def main(): #Array which contains the
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()
这里是大功能(我让它成为最重要的部分):
你能帮忙吗?我做错什么了吗
谢谢我发疯了,但最终我找到了解决办法 在导入Matplotlib之后,我需要添加以下行:
matplotlib.use('Agg')
我过去只在服务器上激活这一行,因为它没有用于绘图的显示,但当我进行一些并行化时,似乎我也需要激活这一行
现在它工作了 我发疯了,但最终我找到了解决办法 在导入Matplotlib之后,我需要添加以下行:
matplotlib.use('Agg')
我过去只在服务器上激活这一行,因为它没有用于绘图的显示,但当我进行一些并行化时,似乎我也需要激活这一行
现在它工作了 在您的内部循环中,
object\u list\u category[1]
是故意的吗?另外,让我提供一些可能导致您找到自己的bug的建议。看起来您已经很好地掌握了多线程/并行处理的工作原理,但请记住,当您通过函数映射元素时,最好将其视为数据转换。函数定义要应用的更改,而iterable是更改为输出的输入。看起来你的函数可能试图遍历你的列表,但你应该让映射为你做这件事…@Peri461是的,这是有意的。因为它是一个元组,所以我只想访问与我的图像对应的第二项。我明白你说的,但因为我已经有了一个与我的参数相对应的iterable,我想测试一下。如何在我的函数中执行两个循环?@lilouch确切的错误消息是什么(回溯)?我想这不是“Python突然崩溃”?在您的内部循环中,object\u list\u category[1]
是故意的吗?另外,让我提供一些建议,可能会让您找到自己的bug。看起来您已经很好地掌握了多线程/并行处理的工作原理,但请记住,当您通过函数映射元素时,最好将其视为数据转换。函数定义要应用的更改,而iterable是更改为输出的输入。看起来你的函数可能试图遍历你的列表,但你应该让映射为你做这件事…@Peri461是的,这是有意的。因为它是一个元组,所以我只想访问与我的图像对应的第二项。我明白你说的,但因为我已经有了一个与我的参数相对应的iterable,我想测试一下。如何在我的函数中执行两个循环?@lilouch确切的错误消息是什么(回溯)?我想这不是“Python突然崩溃”吧?
matplotlib.use('Agg')