我正在用Python编写一个脚本,用ssh在几台计算机(大约10台)上运行,然后让它们开始从Blender渲染3d图像。它工作得很好,除非下一台计算机的渲染在前一台计算机完成之前不会启动。有没有办法启动这些命令并让它们在自己的机器上同时运行?在
我的代码是什么样子的:
import os
path = /home/me
comp1 = ['sneffels','1','2'] #computer name, start frame, end frame
comp2 = ['bierstadt','3','4']
comp3 = ['diente','5','6']
os.system("ssh igp@" + str(comp1[0]) + " blender -b "+ str(path) +" -s " + str(comp1[1]) + " -e " + str(comp1[2]) + " -a")
os.system("ssh igp@" + str(comp2[0]) + " blender -b "+ str(path) +" -s " + str(comp2[1]) + " -e " + str(comp2[2]) + " -a")
os.system("ssh igp@" + str(comp3[0]) + " blender -b "+ str(path) +" -s " + str(comp3[1]) + " -e " + str(comp3[2]) + " -a")
您可以尝试使用threading包。在Salty Crane的博客上可以找到一个简单的例子,可能会对你有所帮助。它应该允许您同时运行所有进程。在
您可能想thread您的电话。我准备了一个小示例,它只是回响一些东西(您可以将其更改为ssh)。我希望它足够清楚,这样你就能明白了
同时,代替操作系统,您应该看一下subprocess模块,或者更好的是,要想使用运行ssh命令的东西,请看一下paramiko模块。在
问题是
os.system
在程序完成之前不会返回,ssh
直到您给它的命令完成后才会返回。在这是不使用
os.system
-正如the documentation明确指出的那样:在
subprocess
中,您可以创建一组子流程,然后在所有子流程启动后将它们全部合并。例如:这可能不是最好的办法。阅读子流程文档,了解为什么
shell=True
并传递字符串通常不如传递参数的list
,以及管理子流程的其他方法等。。但同时,这可能是你已经拥有的最简单的改变。在另一种选择是,首先不要对} 的方法从Python中生成远程进程。在
ssh
命令执行shell操作,而是使用类似于^{相关问题 更多 >
编程相关推荐