Current section

Files

Jump to
workex lib throttler.ex
Raw

lib/throttler.ex

defmodule Workex.Throttler do
def exec_and_measure(fun) do
{time, result} = :timer.tc(fun)
{round(time / 1000) + 1, result}
end
def throttle(time, fun) do
{exec_time, result} = exec_and_measure(fun)
do_throttle(time, exec_time)
result
end
defp do_throttle(time, exec_time) when exec_time < time do
:timer.sleep(time - exec_time)
end
defp do_throttle(_, _), do: :ok
end