首页 > 解决方案 > 在 multiprocessing.process 中将对象从主进程传递给子进程

问题描述

我有一个脚本,它使用 multiprocessing.process 针对不同的起始变量多次使用 solve_ivp 求解微分方程。我想传递一个对象作为参数。该对象应该存储各种常量等。此外,我想使用该类的函数来存储微分方程系统的每个时间步的结果。

如何将该类的对象放入我的所有子进程中?我的想法是稍后导入这些存储我需要的所有数据的对象。但现在我只是从不同文件中的类创建一个空的测试对象。我已经遇到很多问题了。我尝试了以下方法,我稍后在代码中的任何地方都没有使用对象或类,并且已经收到大量错误消息:

仅在 main 中导入模块,仅在 main 中创建一个对象,然后以某种方式将其复制到由所有子进程复制的内存中(我认为,因为它是在我启动进程之前,所以当生成子进程时,内存应该是复制),这不起作用(模块 InputData 未定义)

from multiprocessing import Process, Manager 
from scipy.integrate import solve_ivp 
import numpy as np

if name == 'main': 
    from inputdata import InputData #the class I want to use 
    new_input = InputData(1) #the object I want to send to all of my subprocesses

new_input_help = new_input #here I create the object in the main process 

将类导入所有进程,然后稍后在某个地方创建一个对象。这在尝试导入时已经失败

from multiprocessing import Process, Manager 
from scipy.integrate import solve_ivp 
import numpy as np

from inputdata import InputData #the class I want to use

像 1) 但我后来将对象传递给 manager.dict() 共享内存的东西。哪个不起作用。

from multiprocessing import Process, Manager 
from scipy.integrate import solve_ivp 
import numpy as np

if name == 'main': 
    from inputdata import InputData #the class I want to use 
    new_input = InputData(1) #the object I want to send to all of my subprocesses 

有什么想法,还是我应该不使用对象将数据存储在子进程中,而是使用 manager.list() 来存储整个函数运行的所有结果,然后将其复制到我的项目中?

标签: pythonimportmodulemultiprocessingworker

解决方案


推荐阅读