🚨 Currently beta grade software, I wouldn't recommend usage in production systems, or your personal projects for the matter 😂
A concurrent task scheduler, intended to maximize through put of predefined tasks with clear dependencies on each other to run in parallel where possible. Whilst providing a means to rollback with as little pain as possible.
If available in Hex, the package can be installed
by adding kira
to your list of dependencies in mix.exs
:
def deps do
[
{:kira, "~> 0.1.1"}
]
end
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/kira.
require Kira
require Logger
task_a = %Kira.Branch{
name: :get_a,
apply: fn (config, deps) ->
Logger.info(inspect(config))
{:ok, 2}
end,
}
task_b = %Kira.Branch{
name: :get_b,
apply: fn (config, deps) ->
Logger.info(inspect(config))
{:ok, 3}
end,
}
task_c = %Kira.Branch{
name: :get_c,
dependencies: [:get_a, :get_b],
apply: fn (config, deps) ->
Logger.info(inspect(config))
{:ok, deps[:get_a] + deps[:get_b]}
end,
}
tasks = [task_a, task_b, task_c]
{:ok, results} = Kira.run_tasks(:my_config, tasks)
Logger.info(inspect(results))
# Should log
# 1: :my_config
# 2: :my_config
# 3: :my_config
# 4: %{ :get_a => 2, :get_b => 3, :get_c => 5 }