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 3 Next »

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:

  1. Edit the definition or python file to add the modifications.
  2. Edit t2.ecf to call ecf_client –event.
  3. Copy t1.ecf to t3.ecf and t4.ecf
  4. Load the definition again.
  5. Observe the tasks in ecFlowview.
  6. See the triggers by selecting t3 and clicking on the icon triggers
  7. See the triggers by selecting t2 and click on Dependencies
  • No labels