Skip to content

stocks29/graphex

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Graphex

Build Status

A library for composing and executing task graphs in elixir.

Add as Dependency

{:graphex, "~> 0.2.1"}

Also, be sure to add :graphex to your application's list of OTP applications since it has a supervision tree that must be started before using the library.

Usage

Each node is represented by a separate process so tasks will run in parallel if possible.

incr = fn node ->
  fn r -> r[node] + 1
end

result = exec_graph :e, [
  [name: :a, fun: fn _ -> 0 end],
  [name: :b, fun: incr.(:a), deps: [:a]],
  [name: :c, fun: incr.(:b), deps: [:b]],
  [name: :d, fun: incr.(:b), deps: [:b]],
  [name: :e, fun: incr.(:c), deps: [:c]],
]

assert result == 3

Errors and Retries

Each node can be automatically retried if the function causes the process to die. In order to automatically retry, just set the :tries attribute to a number greater than 1.

  [name: :b, fun: &something_that_might_error/0, deps: [:some_data], tries: 3],

This would automatically retry vertex :b up to 3 times.

If the node fails all tries, it will publish {:error, {:graphex, some_error}} to all of the nodes that depend on it. The dependent nodes can then either continue their processing or simply return an error which will be passed along to the nodes which depend on it.

About

A task graph execution library for elixir

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages