Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Add+another+taskTrigger |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Families |
---|
|
|
|
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.
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.
Code Block |
---|
language | bash |
---|
title | Amend $HOME/course/test/f1/t2.ecf |
---|
|
code |
%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
Code Block |
---|
# 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
#!/usr/bin/env python2.7
Python
Code Block |
---|
language | py |
---|
title | $HOME/course/test.py |
---|
|
import os
|
importfrom ecflow import Defs,Suite,Family,Task,Edit,Trigger,Event
def create_family_f1():
|
f1= ecflow.)f1.add_variable("SLEEP", 20)
f1.add_task
t2=f1.add_task)
t2.add_triggereq
t2.add_eventt2.add_event
f1.add_task).add_trigger
f1.add_task).add_trigger
returnf1
("Creating suite definition" |
defs = ecflow.Defs(suitedefs.add_suite("test")
suite.add_variable("ECF_INCLUDE", os.path.join(os.getenv("HOME"), |
+ /
suite.add_variable("ECF_HOME",
defs = Defs(
Suite("test",
|
os.getenv("HOME") + "/course")
suite.add_family( Edit(ECF_INCLUDE=home,ECF_HOME=home),
create_family_f1()) |
defs ("Checking job creation: .ecf -> .job0" |
(defs.check_job_creation() |
print "Checking trigger expressions" defs.check)
print "Saving definition to file 'test.def'")
defs.save_as_defs("test.def") |
What to do
- Update test.def or test.py
- Edit t2.ecf to call ecflow_client –event.
- Copy t1.ecf to t3.ecf and t4.ecf
- Replace the suite
python: python3 test.py; python3 client.py
text: ecflow_client --suspend=/test ; ecflow_client --replace=/test test.def - Observe the tasks in ecflowview.in ecflow_ui
- See the triggers by selectingt2/t3 and clicking on the icon Image RemovedSee the triggers by selecting t2 and click on Dependenciestrigger tab
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Add+another+taskTrigger |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://softwareconfluence.ecmwf.int/wiki/display/ECFLOW/FamiliesAdd+a+complete |
---|
|
|
|