Есть ли способ запустить три зацикленных метода ruby ​​одновременно (параллельно)? - PullRequest
0 голосов
/ 11 сентября 2018

Итак, я работаю над созданием сценария, который запускает эхо-запросы на сетевых устройствах, а затем уведомляет меня по электронной почте, если устройство отключается.И скрипт работает отлично!

Но я хочу иметь возможность запускать несколько из этих методов одновременно.Вот три метода (они вызывают другие методы, поэтому просто игнорируйте это).

Но я хочу иметь возможность запускать все эти циклические методы одновременно.

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 голосов
/ 13 сентября 2018

Вы можете использовать многопоточность для этой цели.По сути, Thread используется для достижения параллелизма.

здесь, это хорошее чтение https://www.tutorialspoint.com/ruby/ruby_multithreading.htm

0 голосов
/ 11 сентября 2018

когда я впервые смотрю на ваш код, у меня есть 2 вопроса:

1) Как вы запускаете этот код, не будет ли проще запустить каждый мониторинг как отдельный процесс?

2) Я вижу 3 метода, содержащие цикл, почему бы не переместить цикл в окружающий метод?

def do_tests
  loop do
    esxitest
    proxytest
    domaintest
    sleep(10)
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...