使用 comtypes.client

问题描述

我正在使用 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 (将#修改为@)