ecFlow's documentation is now on readthedocs!

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 30 Next »

In the previous exercise we saw that the two tasks were running simultaneously.
We would like now to make sure that t2 only runs once t1 is complete.
For this we have to define a trigger
Triggers are used to declare dependencies between two tasks.
For instance, the second task might need data created by the first task.
When ecFlow tries to start a task, it evaluates the trigger expression.
If the condition is correct, the task is started, otherwise the task
stays queued.
Triggers can be between tasks, or between families, or a mixture.
Remember the two rules:
  • A family is complete when all its tasks are complete.
  • A task will be started if its triggers and the triggers of all is parent families evaluate to true.
A node can only have one trigger expression, but very complex
expressions can be built (and keep in mind that the triggers of the
parent nodes are also implicit triggers).
Sometimes triggers are also used to prevent too many jobs from running
at the same time. In this case the use of a limit may be a better
solution (we will cover limits later on in the Limits section).
Triggers can be very complex, and ecFlow supports all kinds of conditions
(not, and, or, ...)

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
   endfamily
endsuite

Python

#!/usr/bin/env python2.7
import os
import ecflow 

def create_family_f1():
    f1 = ecflow.Family("f1")
    f1.add_variable("SLEEP", 20)
    f1.add_task("t1")
    f1.add_task("t2").add_trigger("t1 eq complete") 
    return f1
    
print "Creating suite definition"   
defs = ecflow.Defs()
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() )
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:

  1. Edit the suite definition file to add the trigger.
  2. Replace the suite.
  3. Observe the tasks in ecflowview.
  4. See the triggers by selecting t1 or t2 and clicking on the triggers icon.
  5. See the trigger relation by clicking on the arrow.
  6. See the triggers in the tree, using the Show drop down menu.
  7. Search any reference to t1 by using the search icon
  • No labels