有没有办法同时(并行)运行三种循环红宝石方法?

时间:2018-09-11 16:51:45

标签: ruby

因此,我正在制作一个脚本,该脚本在网络设备上运行ping,然后在设备离线时通过电子邮件提醒我。脚本运行完美!

但是我希望能够同时运行多个这些方法。这是三个方法(它们正在调用其他方法,因此请忽略它们)。

但是我希望能够同时运行所有循环方法。

def esxitest
    loop do
    test = system "ping -c 4 192.168.1.229"
    puts test
        if test == false 
            test2 = system "ping -c 4 192.168.1.229"
            puts test2
                if test2 == false
                    sendalert1
                    break
                else
                end
        end
    else test == true
    sleep(10) #300
    end
end

def proxytest
    loop do
    test = system "ping -c 4 192.168.1.226"
    puts test
        if test == false 
            test2 = system "ping -c 4 192.168.1.226"
            puts test2
                if test2 == false
                    sendalert2
                    break
                else
                end
        end
    else test == true
    sleep(20) #300
    end
end

def domaintest
    loop do
    test = system "ping -c 4 192.168.1.227"
    puts test
        if test == false 
            test2 = system "ping -c 4 192.168.1.227"
            puts test2
                if test2 == false
                    sendalert3
                    break
                else
                end
        end
    else test == true
    sleep(30) #300
    end
end

2 个答案:

答案 0 :(得分:1)

当我第一次查看您的代码时,我有两个问题:

1)您如何看待这段代码,将每个监视作为其自己的进程启动会更容易吗?

2)我看到3个方法包含一个循环,为什么不将循环移到周围的方法上呢?

def do_tests
  loop do
    esxitest
    proxytest
    domaintest
    sleep(10)
  end
end

答案 1 :(得分:0)

您可以为此目的使用多线程。基本上,线程用于实现并行性。

在这里,https://www.tutorialspoint.com/ruby/ruby_multithreading.htm很好读