Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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突然退出,但程序仍在继续_Python_Multithreading_Multiprocessing - Fatal编程技术网

多处理Python—Python突然退出,但程序仍在继续

多处理Python—Python突然退出,但程序仍在继续,python,multithreading,multiprocessing,Python,Multithreading,Multiprocessing,我对在Python中使用多处理有点着迷。 让我简单解释一下 我有一个图像目录。而图像是内部类别。我一共有十个类别,每个类别有几十张图片 简单地说,我的程序的目标是每个类别随机获取三张图像,并执行一个大的计算,十次对应十个不同的参数 这些程序运行良好,但需要时间。这就是为什么我想使用多处理并行化它 目标是能够使用我的10个核心,在每个核心中,使用一个参数进行计算 我有一个大函数,它有两个for循环 这里是主文件: def main(): #Array which contains the

我对在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()
这里是大功能(我让它成为最重要的部分):

你能帮忙吗?我做错什么了吗


谢谢

我发疯了,但最终我找到了解决办法

在导入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')