有没有一种方法可以限制使用ruby在一秒钟内调用一个函数的次数?

时间:2020-05-07 16:42:44

标签: ruby time

我的SQL查询速度很慢,我想将一秒钟内调用函数的次数限制为(3)。

让我们说我有这些电话,我希望函数能够做到这一点:

call_func() -> true
call_func() -> true
call_func() -> true
call_func() -> false
sleep(1)
call_func() -> true

我设置了每秒最多3个呼叫的限制,然后重置了计时器。您将如何使用Process.clock_gettime(Process::CLOCK_MONOTOMIC)

在ruby中进行此操作

1 个答案:

答案 0 :(得分:0)

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

尽管实际上我认为仅此一项的开销会占用您为SQL查询分配的1秒时间,所以您可能会遇到这样的情况:查询仅在1秒内执行1或2次分配给计时器,我无法开始预测添加此资源会增加的资源(内存等)。

使用线程来处理此问题可能会更好。您只需为每个查询创建一个线程,只要它完成,它就会完成。然后,您可以限制线程池来管理负载。

https://rossta.net/blog/a-ruby-antihero-thread-pool.html