https://msp-greg.github.io/eventmachine/EventMachine/PeriodicTimer.html
Ваш код будет выглядеть примерно так:
n = 0
timer = EventMachine::PeriodicTimer.new(1) do
call_func()
timer.cancel if (n+=1) > 3
end
Хотя по правде говоря, я думаю, что накладные расходы на это сами по себе съедят некоторые из 1 секунда, которую вы выделяете для запроса SQL, поэтому вы можете столкнуться с ситуацией, когда запрос выполняется только 1 или 2 раза в течение секунды, выделенной таймеру, и я не мог начать прогнозировать увеличение ресурсов (память и др. c.), что добавление этого создаст.
Возможно, вам будет лучше просто использовать потоки для решения проблемы. Вы просто создаете поток для каждого запроса, и всякий раз, когда он завершается, он завершается. Затем вы можете ограничить пул потоков для управления нагрузкой.
https://rossta.net/blog/a-ruby-antihero-thread-pool.html