为什么在main中定义的功能有效,但在移至模块时却无效?

时间:2020-03-19 17:10:21

标签: python-3.x multithreading paramiko

我是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)

0 个答案:

没有答案