Я создал демон в Ruby, который имеет счетчик, увеличивающий внутри цикла. Цикл выполняет свою деятельность, затем спит в течение 1 секунды, затем продолжается. Упрощенно это что-то вроде:Каков наилучший способ периодического экспорта счетчика из цикла в Ruby
loop do
response = send_command
if response == 1
counter += 1
end
sleep(1)
end
Каждые 5 минут я хотел бы вызвать метод в базу данных значение счетчика. Я считаю, что есть несколько способов сделать это. Первоначальный способ, который я рассматривал, заключался в вызове Time.now в цикле, рассматривая его, чтобы он соответствовал 5 минутам, 0 секундам, и если это согласовано, вызовите функцию sql. Однако это кажется ужасно неэффективным, и он также может пропустить запись, если send_command заняло некоторое время.
Другой возможностью может быть предоставление переменной счетчика, которая может быть вызвана (и сброшена) через сокет. Я кратко взглянул на класс Socket, и это кажется возможным.
Есть ли очевидный/лучший способ сделать это, что мне не хватает?
К сожалению, мне нужно обновлять счетчик чаще, чем каждые 5 минут. Это цифровое чтение, изменяющееся от 0 до 1 - мне приходится подсчитывать изменения, и многие могут произойти в сегменте за 5 минут. Я сделал немного drb, это просто казалось более чем необходимо. – markf
Извините, я неправильно понял ваш ответ. Это тоже достойный вариант - и я подумаю. – markf
Это то, что я сделал. Я стал глобальным на счетчике (-ах) и создал два потока - один для сбора данных и один для базы данных. Спасибо за помощь. – markf