在Python中使用多处理在程序的新实例中重新加载什么
我推测使用多处理会导致程序的新实例被初始化。e、 g.以下代码将导致7个实例被初始化:在Python中使用多处理在程序的新实例中重新加载什么,python,python-3.x,multiprocessing,Python,Python 3.x,Multiprocessing,我推测使用多处理会导致程序的新实例被初始化。e、 g.以下代码将导致7个实例被初始化: pool = mp.Pool(processes=7) pool.apply_async(process, args=(properties,)) for properties in properties_list] 但我的问题是,新实例中实际加载的是什么?例如,如果我有file_a.py,它调用了file_b.py中的函数,并且file_b.py中的函数使用了多处理,那么重新加载的只是file_b.py
pool = mp.Pool(processes=7)
pool.apply_async(process, args=(properties,)) for properties in properties_list]
但我的问题是,新实例中实际加载的是什么?例如,如果我有
file_a.py
,它调用了file_b.py
中的函数,并且file_b.py
中的函数使用了多处理,那么重新加载的只是file_b.py
,还是file_a.py
和file_b.py
?我相信您所有的导入都会被导入
详细信息因您的启动方法而异
- fork方法(Unix上的默认方法)-这实际上是您的程序。在这种情况下,父级的所有内存和资源都克隆到子级。在父对象中加载的内容将加载到子对象中。(所有资源,如文件描述符,将在两个进程之间共享。)
- spawn或forkserver方法(spawn是Windows上的默认值)-这两种方法都至少启动一个python解释器的新实例,并pickle run方法所需的任何参数和其他资源。据我所知,所有文件_a.py都被解析,包括文件_b.py的导入
在后两种情况下,都表示“不会继承不必要的资源”,但这并不是指加载导入的代码;它是指操作系统资源,如共享内存访问或文件描述符。我相信您所有的导入都将被导入 详细信息因您的启动方法而异
- fork方法(Unix上的默认方法)-这实际上是您的程序。在这种情况下,父级的所有内存和资源都克隆到子级。在父对象中加载的内容将加载到子对象中。(所有资源,如文件描述符,将在两个进程之间共享。)
- spawn或forkserver方法(spawn是Windows上的默认值)-这两种方法都至少启动一个python解释器的新实例,并pickle run方法所需的任何参数和其他资源。据我所知,所有文件_a.py都被解析,包括文件_b.py的导入
多处理
进程之间使用的内存模型解释得很好,我还解释了多处理
进程之间使用的内存模型