Supported Ewoks engines#

Ewoks workflows can be executed with the following engines:

  • dask

  • pypushflow: a task scheduler for acyclic and cyclic graphs

  • Orange: a tool for visual programming and data visualisation

Use a supported engine#

To use any of these engines, you will need to install the associated package:

pip install ewoksdask # for dask
pip install ewoksppf # for pypushflow
pip install ewoksorange # for Orange

Note that Ewoks provides a basic sequential execution engine to be used by default if none of these packages are installed.

To specify the engine used for the execution, use the --engine parameter of ewoks execute (here for dask):

ewoks execute --test demo --engine dask

Warning

Orange works differently since the execution can only be triggered from the Orange GUI.

Running the following command will not execute the graph but opens the Orange GUI for workflow edition.

ewoks execute --test demo --engine orange

To execute the workflow, double-click on task0 to make to Task widget appear and click on Trigger. For more information on how to use the Orange GUI, see the Orange documentation.

Engine comparison#

Depending on the engine used, some features may or may not be available. For example, workflows with conditional links or loops can only be used with pypushflow.

The following table sums up the difference between each engine

engine

Loops

Conditional Links

Parallel execution

Interaction (GUI)

Native support

None

"dask"

"ppf"

"orange"

Note

Native support means that Ewoks tasks can be run by this engine without any needed modification.

In the case of Orange, since execution goes through the GUI, Orange widgets need to be created and associated to the Ewoks task to use it in Orange. This is covered by the Orange widget creation tutorial of the ewoksorange documentation.

Add a new engine to Ewoks#

So far, there is no tutorial to add a new engine to Ewoks since it is heavily dependent on the execution engine itself. In essence, it consists in creating bindings that describe how the execution engine executes workflows.

A good starting point is to look at the ewoksdask project. The bindings.py file exposes a execute_graph function that is registered in Ewoks through the execute_graph decorator. This is the only thing needed to register the engine in Ewoks.

Then, by implementing the workflow execution for a specific execution engine and registering it with the same pattern, one can add support for this execution engine.