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 events.
An event is an indication that a task has reached a certain point in its execution. The task informs the 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 t3 and t4 that will be triggered by the events emitted in task t2.
Create the task scripts for task t3 and task t4 by copying the script from t1.
To notify ecflow_server, the task t2 uses the ecflow_client with the --event option (this is one of the child commands).
%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.
# 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
import os
from ecflow import Defs, Suite, Family, Task, Edit, Trigger, Event
def create_family_f1():
return Family(
"f1",
Edit(SLEEP=20),
Task("t1"),
Task("t2", Trigger("t1 == complete"), Event("a"), Event("b")),
Task("t3", Trigger("t2:a")),
Task("t4", Trigger("t2:b")),
)
print("Creating suite definition")
home = os.path.join(os.getenv("HOME"), "course")
defs = Defs(Suite("test", Edit(ECF_INCLUDE=home, ECF_HOME=home), create_family_f1()))
print(defs)
print("Checking job creation: .ecf -> .job0")
print(defs.check_job_creation())
print("Saving definition to file 'test.def'")
defs.save_as_defs("test.def")
What to do
Create the new task scripts
t3.ecfandt4.ecf, as described above.Modify the task script
t2.ecfto set the events.Modify the suite definition to add the events and the new tasks.
Replace the suite, using:
ecflow_client --suspend /test ecflow_client --replace /test test.def
python3 test.py python3 client.py
Observe the task execution in ecflow_ui.
Inspect the triggers by selecting node
t2ort3and then the Triggers tab