Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
HTML

<div class="section" id="limits">

<span id="index-0"></span><span id="id1"></span>

<div class="line-block">

<div class="line">We have learnt from experience that suite designers were using <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-trigger"><em class="xref std std-term">trigger</em></a>&#8216;s in</div>

<div class="line">two different ways: as data dependency triggers and as courtesy triggers.</div>

<div class="line">The former are for what triggers where designed. The latter are used to prevent too</div>

<div class="line">many jobs running at once and are actually an artificial way of queueing jobs.</div>

</div>

<div class="line-block">

<div class="line">Because ECF does not distinguish between the two sorts of triggers, suites can become</div>

<div class="line">difficult to maintain after a while. So the concept of <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-limit"><em class="xref std std-term">limit</em></a> was introduced.</div>

<div class="line">Limits are declared with the <strong>limit</strong> keyword</div>

</div>

</div>

<div class="section" id="inlimit">

<span id="id2"></span>

<div class="line-block">

<div class="line">Limits are used in conjunction with <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-inlimit"><em class="xref std std-term">inlimit</em></a> keyword.</div>

<div class="line">Limiting a <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-family"><em class="xref std std-term">family</em></a> will limit all the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-task"><em class="xref std std-term">task</em></a>&#8216;s in that family.</div>

<div class="line">A <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-node"><em class="xref std std-term">node</em></a> can be limited by several limits.</div>

</div>

<p>Let us modify our <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite-definition"><em class="xref std std-term">suite definition</em></a> file:</p>

<div class="highlight-python"><pre># Definition of the suite test.

suite test

 edit ECF_INCLUDE "$HOME/course"

 edit ECF_HOME    "$HOME/course"

 limit l1 2

 family f1

     edit SLEEP 20

     task t1

         meter progress 1 100 90

     task t2

         trigger t1 eq complete

         event a

         event b

     task t3

         trigger t2:a

     task t4

         trigger t2 eq complete

         complete t2:b

     task t5

         trigger t1:progress ge 30

     task t6

         trigger t1:progress ge 60

     task t7

         trigger t1:progress ge 90

 endfamily

 family f2

     edit SLEEP 20

     task t1

         time 00:30 23:30 00:30

     task t2

         day  sunday

     task t3

         date 01.*.*

         time 12:00

     task t4

         time +00:02

     task t5

         time 00:02

 endfamily

 family f3

     task t1

         label info ""

 endfamily

 family f4

     edit SLEEP 2

     repeat string NAME a b c d e f

     family f5

         repeat integer VALUE 1 10

         task t1

             repeat date DATE 19991230 20000105

             label info ""

     endfamily

 endfamily

 family f5

     inlimit l1

     edit SLEEP 20

     task t1

     task t2

     task t3

     task t4

     task t5

     task t6

     task t7

     task t8

     task t9

 endfamily

endsuite</pre>

</div>

<p>In python this would be:</p>

<div class="highlight-python"><div class="highlight"><pre><span class="c">#!/usr/bin/env python2.5</span>

<span class="kn">import</span> <span class="nn">os</span>

<span class="kn">import</span> <span class="nn">ecflow</span>  

 

<span class="k">def</span> <span class="nf">create_family_f5</span><span class="p">()</span> <span class="p">:</span>

    <span class="n">f5</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Family</span><span class="p">(</span><span class="s">&quot;f5&quot;</span><span class="p">)</span>

    <span class="n">f5</span><span class="o">.</span><span class="n">add_inlimit</span><span class="p">(</span><span class="s">&quot;l1&quot;</span><span class="p">)</span>

    <span class="n">f5</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">&quot;SLEEP&quot;</span><span class="p">,</span><span class="mi">20</span><span class="p">)</span>

    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">10</span><span class="p">):</span>

        <span class="n">f5</span><span class="o">.</span><span class="n">add_task</span><span class="p">(</span> <span class="s">&quot;t&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="p">)</span>

    <span class="k">return</span> <span class="n">f5</span>

    

<span class="n">defs</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Defs</span><span class="p">(</span><span class="s">&quot;test.def&quot;</span><span class="p">)</span>

<span class="n">suite</span> <span class="o">=</span> <span class="n">defs</span><span class="o">.</span><span class="n">add_suite</span><span class="p">(</span><span class="s">&quot;test&quot;</span><span class="p">)</span>

<span class="n">suite</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">&quot;ECF_INCLUDE&quot;</span><span class="p">,</span><span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">&quot;HOME&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;/course&quot;</span><span class="p">)</span>

<span class="n">suite</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">&quot;ECF_HOME   &quot;</span><span class="p">,</span><span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">&quot;HOME&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot;/course&quot;</span><span class="p">)</span>



<span class="n">suite</span><span class="o">.</span><span class="n">add_limit</span><span class="p">(</span><span class="s">&quot;l1&quot;</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>

<span class="n">suite</span><span class="o">.</span><span class="n">add_family</span><span class="p">(</span> <span class="n">create_family_f5</span><span class="p">()</span> <span class="p">)</span>

</pre></div>

</div>

<p>What to do:</p>

<ol class="arabic simple">

<li>Edit the changes</li>

<li>Play and begin the suite</li>

<li>In <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecflowview"><em class="xref std std-term">ecFlowview</em></a>, observe the triggers of the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-limit"><em class="xref std std-term">limit</em></a> <strong>l1</strong></li>

<li>Open the Info panel for <strong>l1</strong></li>

<li>Change the value of the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-limit"><em class="xref std std-term">limit</em></a></li>

<li>Open the Why? panel for one of the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-queued"><em class="xref std std-term">queued</em></a> tasks of <strong>/test/f5</strong></li>

</ol>

</div>