Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Add+Trigger |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Add+a+complete |
---|
|
|
|
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 |
---|
|
%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
|
...
Python
Code Block |
---|
language | py |
---|
title | $HOME/course/test.py |
---|
|
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.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 ecflow_ui
- See the triggers by selecting t2/t3 and clicking on the trigger tab
Horizontal Navigation Bar |
---|
Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Add+Trigger |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Going+Further |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Add+a+complete |
---|
|
| # Sleep a bit more
ecf_client --event b # Set the second event
sleep %SLEEP% # A last nap...
%include <tail.h></pre>
</div>
<p>What to do:</p>
<ol class="arabic simple">
<li>Edit the definition or python file to add the modifications.</li>
<li>Edit <tt class="file docutils literal"><span class="pre">t2.ecf</span></tt> to call <a class="reference internal" href="../../../glossary/#term-ecf-client"><em class="xref std std-term">ecf_client</em></a> –event.</li>
<li>Copy <tt class="file docutils literal"><span class="pre">t1.ecf</span></tt> to <tt class="file docutils literal"><span class="pre">t3.ecf</span></tt> and <tt class="file docutils literal"><span class="pre">t4.ecf</span></tt></li>
<li>Load the definition again.</li>
<li>Observe the tasks in <a class="reference internal" href="../../../glossary/#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a>.</li>
<li>See the triggers by selecting <strong>t3</strong> and clicking on the icon <img alt="triggers" src="/wiki/download/attachments/7373012/triggers.jpg" /></li>
<li>See the triggers by selecting <strong>t2</strong> and click on <strong>Dependencies</strong></li>
</ol>
</div>
|