.. index:: single: event (tutorial) .. _tutorial-add-event: Add an event ============ Sometimes waiting for the completion of a task is not good enough. If a task is producing several results, another task may start as soon as the first results are ready. For that, ecFlow introduces the concept of :term:`event`\ s. An :term:`event` is a message that a task will report to :term:`ecflow_server` while it is running. Events have names and a :term:`task` can set several of them. Ecf Script ---------- We will create new tasks (t3, t4) that will be triggered by the events emitted in task t2. Create the :term:`ecf script` for t3 and t4 by copying t1. To notify :term:`ecflow_server`, the task (**t2** in the example below) must call :term:`ecflow_client` --event which is one of the :term:`child command`\ s .. code-block:: shell :caption: Amend $HOME/course/test/f1/t2.ecf %include 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 Text ---- .. code-block:: shell # Definition of the suite test. suite test edit ECF_INCLUDE "$HOME/course" # replace '$HOME' with the path to your home directory 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 Python ------ .. literalinclude:: src/add-an-event.py :language: python :caption: $HOME/course/test.py **What to do** #. Update :file:`test.def` **or** :file:`test.py` #. Edit :file:`t2.ecf` to call ``ecflow_client --event`` #. Copy :file:`t1.ecf` to :file:`t3.ecf` and :file:`t4.ecf` #. Replace the :term:`suite`. | Python: ``python3 test.py ; python3 client.py`` | Text: ``ecflow_client --suspend=/test ; ecflow_client --replace=/test test.def`` #. Observe the tasks in :term:`ecflow_ui`. #. See the triggers by selecting **t2/t3** and clicking on the Triggers tab