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