Ruby 如何启动多个远程进程并在所有进程完成时等待
我需要在多个虚拟机中启动多个Python脚本 我想运行脚本并退出。一旦脚本完成,他们应该发送一条消息回来 到目前为止,我的努力是:Ruby 如何启动多个远程进程并在所有进程完成时等待,ruby,multithreading,ssh,Ruby,Multithreading,Ssh,我需要在多个虚拟机中启动多个Python脚本 我想运行脚本并退出。一旦脚本完成,他们应该发送一条消息回来 到目前为止,我的努力是: outputs = {} threads = [] (0..(@number_of_vms - 1)).each do |vm| threads << Thread.new do Net::SSH.start(address[vm], user) do |session| cmd = 'python /media/sf_ope
outputs = {}
threads = []
(0..(@number_of_vms - 1)).each do |vm|
threads << Thread.new do
Net::SSH.start(address[vm], user) do |session|
cmd = 'python /media/sf_openfoam/gen_cfd_results.py'
outputs[address[vm]] = session.exec!(cmd)
end
end
end
threads.each {|thr| thr.join }
outputs={}
线程=[]
(0..(@numberofvms-1))。每个都有虚拟机|
找到的线程必须使用连接。作为建议,您需要跟踪连接到的每个系统的响应。我建议为每个主机使用一个带有密钥的散列,但这是您的实现选择。想象一下,如果你不知道哪台机器出了故障,那么在诊断问题时会遇到什么问题。另外,我会使用address.each
来循环,但我可能太天真了。谢谢。我已编辑代码以包含您的建议。这是非常奇怪的,因为这段代码在我本地的虚拟机上按预期工作,但实际上它在amazon上的其他4个虚拟机上立即退出。是否存在超时问题?忘记亚马逊上的问题。我的错误。如果你回答这个问题,我会接受的。谢谢你必须使用你找到的加入。作为建议,您需要跟踪连接到的每个系统的响应。我建议为每个主机使用一个带有密钥的散列,但这是您的实现选择。想象一下,如果你不知道哪台机器出了故障,那么在诊断问题时会遇到什么问题。另外,我会使用address.each
来循环,但我可能太天真了。谢谢。我已编辑代码以包含您的建议。这是非常奇怪的,因为这段代码在我本地的虚拟机上按预期工作,但实际上它在amazon上的其他4个虚拟机上立即退出。是否存在超时问题?忘记亚马逊上的问题。我的错误。如果你回答这个问题,我会接受的。谢谢