Techioz Blog

Ruby プロセスを永久に実行し続けるための最良の方法は何でしょうか?

概要

マイクロタスク (データベースへのクエリの挿入) を作成する file.rb を毎秒実行する必要があります。

for ループ (1..10^9) を使用しましたが、CPU 使用率超過のアラートが表示されました。では、すべての CPU を無駄にしない最善の方法は何でしょうか?

解決策

永久に実行する最も簡単な方法はループすることです

loop do
  run_db_insert
  sleep 1
end

1 Hz のレートを維持することが重要な場合は、DB の挿入にはある程度の時間がかかるため、1 秒のスリープは各サイクルに dbtime + 1 秒かかることを意味し、着実に遅れが生じることに注意してください。 DB インタラクションが 1 秒未満であることが確実な場合は、次の 1 秒間隔に合わせてスリープを変更できます。

loop do
  run_db_insert
  sleep(Time.now.to_f.ceil - Time.now.to_f)
end