Ruby — каковы особенности работы потоков?

Здравствуйте! Есть некий процесс, который должен работать постоянно, но может повиснуть. Хочу написать скрипт на Ruby, который будет запускать этот процесс и в отдельном потоке с определенным интервалом проверять его работу (особым образом)
class PingWatchdog
	def initialize(server)
		Thread.new {
			while true do
				unless LaLaLa.test?(IP, PORT, PING_TIMEOUT)
					server.stop
				end
				sleep WATCHDOG_DELAY
			end
		}
	end
end

class ServerProcess
	def initialize(*opts)
		@proc_pid = spawn(CMD)
		@proc_thr = Process.detach(@proc_pid)
		@watchdog = PingWatchdog.new self
	end
	def wait
		@proc_thr.join
	end
	def command(data)
		$stdout << "#{data}\n"
	end
	def kill
		Process.kill('TERM', @proc_pid)
	end
end


while true
	server = ServerProcess.new
	server.wait
end


Так вот, можно ли так каждый раз запускать новый PingWatchdog? Когда будет переназначена переменная server, не останется ли работать поток в PingWatchdog? Если он будет запущен несколько раз, это нарушит работу процесса

Да и вообще, может быть можно как-то правильнее это реализовать?
Буду рад любым советам!
  • Вопрос задан
  • 2419 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
supervisord

А вообще, не лучше ли найти причину подвисаний? Пусть лучше крешается а не виснет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы