File: adding-an-event.rst

package info (click to toggle)
ecflow 5.15.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 51,868 kB
  • sloc: cpp: 269,341; python: 22,756; sh: 3,609; perl: 770; xml: 333; f90: 204; ansic: 141; makefile: 70
file content (95 lines) | stat: -rw-r--r-- 2,941 bytes parent folder | download
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
.. index::
   single: event (tutorial)
   
.. _tutorial-add-event:

Adding an event
===============

If a task produces several results, it may be useful to start other tasks as soon as the first results are ready.
For that, ecFlow introduces the concept of :term:`event`\ s.

An :term:`event` is an indication that a task has reached a certain point in its execution.
The task informs the :term:`ecflow_server` of this by setting the event, at any point during task execution.
Each event has a name, and a task may have several events.

Update Task Script
------------------

Create new tasks :code:`t3` and :code:`t4` that will be triggered by the events emitted in task :code:`t2`.
Create the :term:`task scripts <ecf script>` for task :code:`t3` and task :code:`t4` by copying the script from :code:`t1`.
    
To notify :term:`ecflow_server`, the task :code:`t2` uses the :term:`ecflow_client` with the :code:`--event` option (this is one of the :term:`child commands <child command>`).

.. code-block:: shell
   :caption: Amend $HOME/course/test/f1/t2.ecf

   %include <head.h>
   echo "I will now sleep for %SLEEP% seconds"
   sleep %SLEEP%
   ecflow_client --event a       # Set the first event 
   sleep %SLEEP%                 # Sleep a bit more 
   ecflow_client --event b       # Set the second event 
   sleep %SLEEP%                 # A last nap... 
   %include <tail.h>

Update Suite Definition
-----------------------

Update the suite definition to add the events and the new tasks.

.. tabs::

    .. tab:: Text

        .. code-block:: shell

            # Definition of the suite test.
            suite test
              edit ECF_INCLUDE "{{HOME}}/course" # replace '{{HOME}}' appropriately
              edit ECF_HOME    "{{HOME}}/course"
              family f1
                edit SLEEP 20
                task t1
                task t2
                  trigger t1 eq complete
                  event a
                  event b
                task t3
                  trigger t2:a
                task t4
                  trigger t2:b
              endfamily
            endsuite

    .. tab:: Python

        .. literalinclude:: src/add-an-event.py
           :language: python
           :caption: $HOME/course/test.py

**What to do**

#. Create the new task scripts :file:`t3.ecf` and :file:`t4.ecf`, as described above.
#. Modify the task script :file:`t2.ecf` to set the events.
#. Modify the suite definition to add the events and the new tasks.
#. Replace the :term:`suite`, using:

   .. tabs::

      .. tab:: Text

         .. code-block:: shell

            ecflow_client --suspend /test
            ecflow_client --replace /test test.def

      .. tab:: Python

         .. code-block:: shell

            python3 test.py
            python3 client.py

#. Observe the task execution in :term:`ecflow_ui`.
#. Inspect the triggers by selecting node :code:`t2` or :code:`t3` and then the Triggers tab