View Source Finitomata.Throttler (Finitomata v0.25.0)
The internal definition of the call to throttle.
Finitomata.Throttler.call/3
is a blocking call similar to GenServer.call/3
, but
served by the underlying GenStage
producer-consumer pair.
Despite this implementation of throttling based on GenStage
is provided
mostly for internal needs, it is generic enough to use wherever. Use the childspec
{Finitomata.Throttler, name: name, initial: [], max_demand: 3, interval: 1_000}
to start a throttling process and Finitomata.Throttler.call/3
to perform throttled
synchronous calls from different processes.
Usage
{:ok, pid} = Finitomata.Throttler.start_link(name: Throttler)
Finitomata.Throttler.call(Throttler, {IO, :inspect, [42]})
42
#⇒ %Finitomata.Throttler{
# from: {#PID<0.335.0>, #Reference<0.3154300821.2643722246.59214>},
# fun: {IO, :inspect},
# args: ~c"*",
# result: 42,
# duration: 192402,
# payload: nil
# }
Summary
Types
The in/out parameter for calls to Finitomata.Throttler.call/3
The simplified in parameter for calls to Finitomata.Throttler.call/3
Types
@type t() :: %Finitomata.Throttler{ from: GenServer.from(), fun: (keyword() -> any()), args: keyword(), result: any(), duration: pos_integer(), payload: any() }
The in/out parameter for calls to Finitomata.Throttler.call/3
The simplified in parameter for calls to Finitomata.Throttler.call/3
Functions
Synchronously executes the function, using throttling based on GenStage
.
This function has a default timeout :infinity
because of its nature
(throttling is supposed to take a while,) but it might be passed as the third
argument in a call to call/3
.
If a list of functions is given, executes all of them in parallel, collects the results, and then returns them to the caller.
The function might be given as Finitomata.Throttler.t/0
or
in a simplified form as {function_of_arity_1, arg}
or {mod, fun, args}
.
Returns a specification to start this module under a supervisor.
See Supervisor
.
Starts the throttler with the underlying producer-consumer stages.
Accepted options are: