Supported Ewoks engines#
Ewoks workflows can be executed with the following engines:
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 |
---|---|---|---|---|---|
|
✗ |
✗ |
✗ |
✗ |
✓ |
|
✗ |
✗ |
✓ |
✗ |
✓ |
|
✓ |
✓ |
✓ |
✗ |
✓ |
|
✗ |
✗ |
✓ |
✓ |
✗ |
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.