gpt4 book ai didi

python - 使用python启动并行ssh渲染作业

转载 作者:行者123 更新时间:2023-12-02 13:58:10 26 4
gpt4 key购买 nike

我正在用Python编写脚本以将ssh放入几台计算机(大约十台)中,并让它们开始从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")

最佳答案

问题在于,直到程序完成,os.system才返回,而直到您给出命令的ssh才完成。

这是不使用os.system的众多原因之一-the documentation明确表示:

The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See the Replacing Older Functions with the subprocess Module section in the subprocess documentation for some helpful recipes.



subprocess中,您可以创建一堆子流程,然后在所有子流程启动之后将它们加入。例如:
p1 = subprocess.Popen("ssh igp@" + str(comp1[0]) + " blender -b "+ str(path) +" -s " + str(comp1[1]) + " -e " + str(comp1[2]) + " -a", shell=True)
p2 = subprocess.Popen("ssh igp@" + str(comp2[0]) + " blender -b "+ str(path) +" -s " + str(comp2[1]) + " -e " + str(comp2[2]) + " -a", shell=True)
p3 = subprocess.Popen("ssh igp@" + str(comp3[0]) + " blender -b "+ str(path) +" -s " + str(comp3[1]) + " -e " + str(comp3[2]) + " -a", shell=True)
p1.wait()
p2.wait()
p3.wait()

那可能不是最好的方法。阅读子流程文档以了解为什么 shell=True和传递字符串通常不如传递参数的 list,管理子流程的其他方式等效果好。但是,与此同时,这可能是最简单的更改。

另一种选择是不首先使用 ssh命令,而是使用 paramiko 之类的东西从Python内部生成远程进程。

关于python - 使用python启动并行ssh渲染作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com