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 events.
An event is a message that a task will report to ecflow_server while it is running. Events have names and a 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 ecf script for t3 and t4 by copying t1.
To notify ecflow_server, the task (t2 in the example below) must call ecflow_client –event which 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>
Text
# 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
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
Update
test.defortest.pyEdit
t2.ecfto callecflow_client --eventCopy
t1.ecftot3.ecfandt4.ecfReplace the suite.
Python:python3 test.py ; python3 client.pyText:ecflow_client --suspend=/test ; ecflow_client --replace=/test test.defObserve the tasks in ecflow_ui.
See the triggers by selecting t2/t3 and clicking on the Triggers tab