2017-01-17 3 views
1

나는 Heroku에서이 작업자 프로세스를 사용하고 있습니다. 그것은 2 시간마다 실행되고 Heroku가 신호를 종료하는 것을 듣습니다. 그것은 잘 작동하지만 나는 항상 100 % dyno로드를보고 있어요.Heroku 직원이 100 % dyno로드를 사용하는 이유는 무엇입니까?

질문 : 100 % dyno로드없이 Heroku에서 이러한 종류의 작업자 프로세스를 실행하는 방법은 무엇입니까? 루프가 dyno로드를 발생 시키지만 무한 루프 대신 사용할 것은 무엇입니까?

# Scheduler here 
cleanup = Rufus::Scheduler.new 
cleanup.cron '* */2 * * *' do 
    do_some_cleaning 
end 

# Signal trapping 
Signal.trap("TERM") { 
    terminate = true 
    shut_down 
    exit 0 
} 

# Infinite loop 

while terminate == false 
end 

답변

2

슬립 사이클없이 무한 루프를 수행하기 때문입니다. 이는 기본적으로 모든 단일 사이클에서 루프 조건을 즉시 실행해야한다는 것을 CPU에 알리는 것을 의미합니다.

이렇게하면 CPU가 빨리 소모됩니다.

대신, 무한 루프에 잠 문을 던지는 시도 -이 실행을 일시 중지하고 0 %까지 사용량을 가져올 것 =)

while terminate == false 
    sleep 1 
end 
1

나는 빨리 그것에 대해 생각해야한다.

while !terminated 
    sleep 0.3 
    trigger_schedules_if_any 
end 
:에 의사 상응하는 루퍼스 - 스케줄러 스케줄링 스레드에 참여하고있다

cleanup_scheduler = Rufus::Scheduler.new 
cleanup_scheduler.cron '* */2 * * *' do 
    do_some_cleaning 
end 

Signal.trap('TERM') do 
    shut_down 
    exit 0 
end 

cleanup_scheduler.join 

: 당신은 실제로 단순히 루퍼스 - 스케줄러의 루프에 가입하실 수 있습니다