2016-06-14 2 views
2

У меня есть класс, который запускает и управляет рабочей нитью. Нить выглядит примерно так:Каковы последствия для работы нескольких часов в Ruby-потоке?

DELAY = 6 * 60 * 60 # Sleep 6 hours by default 

Thread.new do 
    do_some_work() 

    sleep(DELAY) 
end 

do_some_work не очень ресурсоемкий, занимает около 5 секунд, чтобы завершить в среднем; но он не должен блокироваться, и есть вероятность для дросселирования ошибок, если я часто его вызываю.

Я не уверен, что последствия спать несколько часов в рубиновой нити. Должен ли я ожидать каких-либо серьезных штрафных санкций за использование этого кода? Вероятно, стоит отметить, что я не могу использовать задачу cron для этой задачи.

+2

Обычно это знак того, что вам нужен правильный планировщик задач, а не какой-то поток, который спит в течение совершенно произвольного времени. 'cron' также является хорошим вариантом здесь. – tadman

+0

'cron' была моей первой мыслью; к сожалению, я не могу использовать его в этой ситуации. Я благодарен за ответ. – jamesberlage

ответ

2

Интерпретатор Ruby будет использовать память в вашей системе до тех пор, пока она работает. Поэтому, если вы выполняете весь процесс интерпретации Ruby, чтобы этот поток мог просыпаться каждые 6 часов и делать все, что может быть плохо. Вы можете использовать средства мониторинга системы вашей операционной системы, чтобы узнать, сколько памяти занимает процесс.

Помимо этого, должно быть хорошо, что у вас есть нить, которая спит в течение многих часов.

+0

Спасибо, я ценю ответ. – jamesberlage