python多处理有限元仿真过程

时间:2015-03-23 20:07:06

标签: python multiprocessing

我正在编写一个Python工具,它会自动为我做一些操作。自动化的一部分是并行处理n个LSDYNA有限元模拟。我想将n个模拟发送到池中,并将它们分发给用户指定数量的处理器x。当一个模拟终止时,另一个应该从池发送到空闲处理器,直到池为空。此时,其余的python代码应该继续执行。如果这个代码在我的Windows机器上正常工作,我希望在任何时候看到运行LSDYNA的x个cmd窗口(直到池为空)。

我已经阅读了许多类似的问题,他们似乎最终都使用了多处理模块。我编写了一个我认为正确的代码,但是当我执行它时,没有任何反应。终端窗口中没有错误消息,我没有得到任何LSDYNA输出。

我确实有一个Windows批处理脚本可以正常工作并执行相同的操作,以防对任何人有帮助。

如果我做错了什么,关于LSDYNA的说明:当通过命令行运行时,每个模拟都在自己的终端窗口中运行。输出文件在命令执行时写入当前目录。命令格式为:

"C:\LSDYNA\program\ls971_s_R5.1.1_winx64_p.exe" i=input.k ncpu=1 memory=100m

这是我提出的Python代码:

import os
import multiprocessing as mp
import subprocess
import glob

def run_LSDYNA(individual_sim_dir, model_name, solver_path):

    os.chdir(individual_sim_dir)

    os.environ['lstc_license'] = 'network'
    os.environ['lstc_license_server'] = 'xxx.xx.xx.xx'

    subprocess.call([solver_path, "i=%s" % model_name, "ncpu=1", "memory=100m"])

def parallel(sim_dir, procs, model_name, solver_path):

    run_dirs = []

    for individual_sim_dir in glob.glob(os.path.join(sim_dir, 'channel_*')):
        run_dirs.append(individual_sim_dir)

    pool = mp.Pool(processes=procs)

    args = ((run_dir, model_name, solver_path) for run_dir in run_dirs)
    simulations = pool.map_async(run_LSDYNA, args)

    simulations.wait()

if __name__ == "__main__":
    mp.freeze_support()
    parallel('C:\Users\me\Desktop\script_test\Lower_Leg_Sims', 2, 'boot.k', "C:\LSDYNA\program\ls971_s_R5.1.1_winx64_p.exe")

0 个答案:

没有答案