我的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)
答案 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次分配给计时器,我无法开始预测添加此资源会增加的资源(内存等)。
使用线程来处理此问题可能会更好。您只需为每个查询创建一个线程,只要它完成,它就会完成。然后,您可以限制线程池来管理负载。