1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
Implementation notes
====================
Graph of actors
---------------
An Ewoks task graph is converted to a graph of *actors* before execution.
Source
^^^^^^
A task is wrapped by an *EwoksPythonActor* followed by some binder actors, depending on the type of link between source and target. For each link in the task graph, the final actor of the source is a *NameMapperActor* which is connected to the target.
Unconditional link
.. mermaid::
graph LR;
EwoksPythonActor-->NameMapperActor;
Conditional link with one condition
.. mermaid::
graph LR;
EwoksPythonActor-->ConditionalActor;
ConditionalActor-->NameMapperActor;
On-Error conditional link
.. mermaid::
graph LR;
EwoksPythonActor-->NameMapperActor;
Target
^^^^^^
.. mermaid::
graph LR;
InputMergeActor-->EwoksPythonActor;
The *NameMapperActor* of a source for a specific target is connected to the *InputMergeActor* before that target.
Start actor
^^^^^^^^^^^
The *StartActor* is connected to all tasks that are the start of a task scheduling thread.
Stop actor
^^^^^^^^^^
Tasks without successors are connected to the *StopActor*. This actor manages a dictionary of outputs which is considered to be the "output of the graph".
Error handler
^^^^^^^^^^^^^
All actors that do not have an _on_error_ conditional link are connected to the *ErrorHandler* which directly connected to the *StopActor*.
Custom actors
^^^^^^^^^^^^^
These actors are not provided by *pypushflow*
* *EwoksythonActor*: like *PythonActor* but it passes node name and attributes to the next actor.
* *InputMergeActor*: like *Joinactor* (merges the input data dictionaries) triggers the downstream actors when all required input has been provided at least once. Only one non-required input passed.
* *ConditionalActor*: triggers downstream actors when all conditions are fulfilled.
* *NameMapperActor*: before triggering the next task it applies filtering and name mapping to the input data.
|