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 event‘s.
An event is a message that a task will report to ECF while
it is running.
Events have names and a task can set several of them:
# Definition of the suite test.
suite test
edit ECF_INCLUDE "$HOME/course"
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
In python this would be like:
#!/usr/bin/env python2.5
import os
import ecflow
def create_family_f1():
f1 = ecflow.Family("f1")
f1.add_variable("SLEEP",20)
f1.add_task("t1")
t2 = f1.add_task("t2")
t2.add_trigger("t1 eq complete")
t2.add_event("a")
t2.add_event("b")
t3 = f1.add_task("t3")
t3.add_trigger("t2:a")
t4 = f1.add_task("t4")
t4.add_trigger("t2:b")
return f1
defs = ecflow.Defs("test.def")
suite = defs.add_suite("test")
suite.add_variable("ECF_INCLUDE",os.getenv("HOME") + "/course")
suite.add_variable("ECF_HOME ",os.getenv("HOME") + "/course")
suite.add_family( create_family_f1() )
To notify ecf_server, the task t2 must call
ecf_client –event which is one of the child command‘s
%include <head.h>
echo "I will now sleep for %SLEEP% seconds"
sleep %SLEEP%
ecf_client --event a # Set the first event
sleep %SLEEP% # Sleep a bit more
ecf_client --event b # Set the second event
sleep %SLEEP% # A last nap...
%include <tail.h>
What to do:
- Edit the definition or python file to add the modifications.
- Edit t2.ecf to call ecf_client –event.
- Copy t1.ecf to t3.ecf and t4.ecf
- Load the definition again.
- Observe the tasks in ecFlowview.
- See the triggers by selecting t3 and clicking on the icon
- See the triggers by selecting t2 and click on Dependencies