我是python的新手,尤其是多线程,所以我可能会错过一些显而易见的东西。
基本上,我想做的是使用不同的初始条件在远程计算机上运行多个模拟。这是多线程的理想用例,因为我的脚本只需要向远程主机发出启动模拟命令,然后等待模拟完成即可。
我已经启动并运行了脚本,但是当我尝试将启动仿真功能从main移到模块时,我会得到不同的行为。 然后线程不再等待仿真完成,而是很快地一个接一个地启动所有剩余的仿真。
我使用paramiko建立与远程计算机的连接(未在代码中显示),并传输启动命令。据我了解,stdout.channel.recv_exit_status()行应该让脚本等待远程计算机的响应,因此暂停脚本直到收到此响应。
我不明白为什么在main中定义函数但在模块中定义函数时脚本不起作用。请问有人愿意详细说明吗?
这是我使用的功能。现在,我省略了建立连接和创建作业列表的部分。请告诉我是否也需要这些零件。谢谢
def start_simulation(job):
path_to_kernel = PurePosixPath('/usr/foo/bar/kernel')
destination = PurePosixPath(job).parents[0]
myinput='nohup {} {} {}/ &>/dev/null'.format(str(path_to_kernel),
str(job),str(destination))
stdin, stdout, stderr = client.exec_command(myinput)
exit_status = stdout.channel.recv_exit_status()
print(exit_status)
with concurrent.futures.ThreadPoolExecutor(max_workers=6) as executor:
executor.map(start_simulation, jobs)