问题描述
我正在使用 Python 和 Tecnomatix PlantSimulation 运行一些模拟。
这是我的代码:
import multiprocessing as mp
from comtypes.client import CreateObject
from itertools import repeat
import time
def executeSim(PlantSim,number):
print("Model successfully loaded")
PlantSim.StartSimulation("path to event controller in simulation")
while(PlantSim.IsSimulationRunning()):
time.sleep(0.1)
PlantSim.SaveModel("some path" + str(number) + ".spp")
def main():
PlantSim = CreateObject('Tecnomatix.PlantSimulation.RemoteControl.15.2')
PlantSim.LoadModel("path to model")
PlantSim.ResetSimulation("path to event controller in simulation")
i = [5,8]
with mp.Pool(2) as pool:
pool.starmap(executeSim,zip(repeat(PlantSim),i))
if __name__ == "__main__":
main()
由于加载模拟需要大约 10 秒,我想在主线程中只执行一次,然后启动与同一模型并行运行的多个模拟。一旦我传递了 comtypes 对象,我就会得到一个 PicklingError
。
这就是为什么我也尝试过悲情:
from pathos.multiprocessing import ProcessingPool
with ProcessingPool(2) as pool:
pool.map(executeSim,PlantSim,2)
但我也得到了一个 PicklingError
。最后但并非最不重要的是,我尝试了 joblib:
from joblib import Parallel,delayed
Parallel(n_jobs=2)(delayed(executeSim)(PlantSim,i) for i in range(2))
JobLib 导致 TerminatedWorkerError
在终端中通知无法找到某些进程。
有人在与 comtypes 并行运行模拟方面有经验吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)