source: sasview/_modules/park/monitor.html @ a462c6a

gh-pages
Last change on this file since a462c6a was a462c6a, checked in by ajj, 9 years ago

Rebuild to fix index and modules docs

  • Property mode set to 100644
File size: 31.0 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>park.monitor &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../index.html" />
28    <link rel="up" title="Module code" href="../index.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li> 
42      </ul>
43    </div> 
44
45    <div class="document">
46      <div class="documentwrapper">
47        <div class="bodywrapper">
48          <div class="body">
49           
50  <h1>Source code for park.monitor</h1><div class="highlight"><pre>
51<span class="c"># This program is public domain</span>
52<span class="sd">&quot;&quot;&quot;</span>
53<span class="sd">Asychronous execution monitoring service.</span>
54
55<span class="sd">Long running computations need to convey status information to the user.</span>
56<span class="sd">This status can take multiple forms, such as output to the console or</span>
57<span class="sd">activity on a GUI, or even mail to your inbox.</span>
58
59<span class="sd">park.monitor defines several standard message types::</span>
60
61<span class="sd">    `Start` for job start</span>
62<span class="sd">    `Join` first message when joining an already running job</span>
63<span class="sd">    `Progress` for job activity</span>
64<span class="sd">    `Improvement` for partial results</span>
65<span class="sd">    `Complete` for final result</span>
66<span class="sd">    `Abort` when job is killed</span>
67<span class="sd">    `Error` when job has an error</span>
68<span class="sd">    `Log` for various debugging messages</span>
69
70<span class="sd">Individual services may have specialized message types.</span>
71
72<span class="sd">park.monitor also defines `Monitor` to process the various kinds of messages,</span>
73<span class="sd">and dispatch them to the various user defined handlers.</span>
74
75<span class="sd">For each message type, the Monitor dispatcher will look for a function</span>
76<span class="sd">named onMonitorQQQ where QQQ is the message type.  For example,</span>
77<span class="sd">onMonitorStart(self, message) will be called in response to a Start message.</span>
78<span class="sd">If onMonitorQQQ is not defined, then onMonitorMessage will be called.  The</span>
79<span class="sd">default behaviour of onMonitorMessage is to print the message on the console.</span>
80
81<span class="sd">Log messages are sent to the standard system logger.  See logging in the</span>
82<span class="sd">python standard library for details.</span>
83
84<span class="sd">The Monitor class has methods for onMonitorStart(message), etc.</span>
85<span class="sd">In panel, be sure to have methods for onMonitorStart(message), </span>
86<span class="sd">onMonitorProgress(message), etc., for the kinds of monitor messages </span>
87<span class="sd">the application will send.  The catch-all method is onMonitorMessage.</span>
88
89<span class="sd">See `park.monitor` for details on the message types.  Individual services</span>
90<span class="sd">may have additional message types.</span>
91
92<span class="sd">&quot;&quot;&quot;</span>
93<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;Monitor&#39;</span><span class="p">]</span>
94
95<span class="kn">import</span> <span class="nn">sys</span>
96<span class="kn">import</span> <span class="nn">logging</span>
97<span class="kn">import</span> <span class="nn">traceback</span>
98
99<span class="k">class</span> <span class="nc">Message</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
100    <span class="sd">&quot;&quot;&quot;</span>
101<span class="sd">    Message type</span>
102<span class="sd">    &quot;&quot;&quot;</span>
103
104<span class="k">class</span> <span class="nc">Start</span><span class="p">(</span><span class="n">Message</span><span class="p">):</span>
105    <span class="sd">&quot;&quot;&quot;</span>
106<span class="sd">    Start.</span>
107
108<span class="sd">    Sent when the job has started processing.</span>
109<span class="sd">    &quot;&quot;&quot;</span>
110    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="s">&quot;Start&quot;</span>
111
112<span class="k">class</span> <span class="nc">Join</span><span class="p">(</span><span class="n">Message</span><span class="p">):</span>
113    <span class="sd">&quot;&quot;&quot;</span>
114<span class="sd">    Join: k units of n with partial result</span>
115<span class="sd">    </span>
116<span class="sd">    Sent when the listener is attached to a running job.  This is</span>
117<span class="sd">    a combination of Progress and Improvement.</span>
118<span class="sd">    &quot;&quot;&quot;</span>
119    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">partial</span><span class="p">):</span>
120        <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">n</span>
121        <span class="sd">&quot;&quot;&quot;Total work to complete&quot;&quot;&quot;</span>
122        <span class="bp">self</span><span class="o">.</span><span class="n">complete</span> <span class="o">=</span> <span class="n">k</span>
123        <span class="sd">&quot;&quot;&quot;Amount of work complete&quot;&quot;&quot;</span>
124        <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">partial</span>
125        <span class="sd">&quot;&quot;&quot;The partial result completed; this is job specific&quot;&quot;&quot;</span>
126    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="s">&quot;Join: &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">)</span>
127   
128<span class="k">class</span> <span class="nc">Progress</span><span class="p">(</span><span class="n">Message</span><span class="p">):</span>
129    <span class="sd">&quot;&quot;&quot;</span>
130<span class="sd">    Progress: k units of n.</span>
131
132<span class="sd">    Sent when a certain amount of progress has happened.</span>
133
134<span class="sd">    Use the job controller to specify the reporting</span>
135<span class="sd">    frequency (time and/or percentage).</span>
136<span class="sd">    &quot;&quot;&quot;</span>
137    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">n</span><span class="p">,</span> <span class="n">units</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
138        <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">n</span>
139        <span class="sd">&quot;&quot;&quot;Total work to complete&quot;&quot;&quot;</span>
140        <span class="bp">self</span><span class="o">.</span><span class="n">complete</span> <span class="o">=</span> <span class="n">k</span>
141        <span class="sd">&quot;&quot;&quot;Amount of work complete&quot;&quot;&quot;</span>
142        <span class="bp">self</span><span class="o">.</span><span class="n">units</span> <span class="o">=</span> <span class="n">units</span>
143        <span class="sd">&quot;&quot;&quot;Units of work, or None&quot;&quot;&quot;</span>
144    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
145        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">units</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
146            <span class="k">return</span> <span class="s">&quot;Progress: </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> of </span><span class="si">%s</span><span class="s">&quot;</span><span class="o">%</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">complete</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">units</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">)</span>
147        <span class="k">else</span><span class="p">:</span>
148            <span class="k">return</span> <span class="s">&quot;Progress: </span><span class="si">%s</span><span class="s"> of </span><span class="si">%s</span><span class="s">&quot;</span><span class="o">%</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">complete</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">)</span>
149
150<span class="k">class</span> <span class="nc">Improvement</span><span class="p">(</span><span class="n">Message</span><span class="p">):</span>
151    <span class="sd">&quot;&quot;&quot;</span>
152<span class="sd">    Improvement: partial result.</span>
153
154<span class="sd">    Use the job controller to specify the improvement frequency</span>
155<span class="sd">    (time and/or percentage).</span>
156<span class="sd">    &quot;&quot;&quot;</span>
157    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partial</span><span class="p">):</span>
158        <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">partial</span>
159        <span class="sd">&quot;&quot;&quot;The partial result completed; this is job specific&quot;&quot;&quot;</span>
160    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
161        <span class="k">return</span> <span class="s">&quot;Improvement: &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">)</span>
162
163<span class="k">class</span> <span class="nc">Complete</span><span class="p">(</span><span class="n">Message</span><span class="p">):</span>
164    <span class="sd">&quot;&quot;&quot;</span>
165<span class="sd">    Complete: final result.</span>
166<span class="sd">    &quot;&quot;&quot;</span>
167    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">final</span><span class="p">):</span>
168        <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">final</span>
169        <span class="sd">&quot;&quot;&quot;The final completed result; this is job specific&quot;&quot;&quot;</span>
170    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
171        <span class="k">return</span> <span class="s">&quot;Complete: &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">)</span>
172
173<span class="k">class</span> <span class="nc">Error</span><span class="p">(</span><span class="n">Message</span><span class="p">):</span>
174    <span class="sd">&quot;&quot;&quot;</span>
175<span class="sd">    Traceback stack trace.</span>
176<span class="sd">    &quot;&quot;&quot;</span>
177    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trace</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
178        <span class="k">if</span> <span class="n">trace</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span> <span class="n">trace</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
179        <span class="bp">self</span><span class="o">.</span><span class="n">trace</span> <span class="o">=</span> <span class="n">trace</span>
180        <span class="sd">&quot;&quot;&quot;The stack trace returned from exc_info()&quot;&quot;&quot;</span>
181    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
182        <span class="c">#print &quot;traceback&quot;,traceback.format_exception(*self.trace)</span>
183        <span class="k">try</span><span class="p">:</span>
184            <span class="k">return</span> <span class="s">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exception</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">trace</span><span class="p">))</span>
185        <span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
186            <span class="k">return</span> <span class="s">&quot;Error: &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trace</span><span class="p">)</span>
187
188<span class="k">class</span> <span class="nc">Abort</span><span class="p">(</span><span class="n">Message</span><span class="p">):</span>
189    <span class="sd">&quot;&quot;&quot;</span>
190<span class="sd">    Abort: partial result</span>
191
192<span class="sd">    Use the job controller to signal an abort.</span>
193<span class="sd">    &quot;&quot;&quot;</span>
194    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">partial</span><span class="p">):</span>
195        <span class="bp">self</span><span class="o">.</span><span class="n">result</span> <span class="o">=</span> <span class="n">partial</span>
196        <span class="sd">&quot;&quot;&quot;The partial result completed; this is job specific&quot;&quot;&quot;</span>
197    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
198        <span class="k">return</span> <span class="s">&quot;Abort: &quot;</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">)</span>
199
200<span class="k">class</span> <span class="nc">Log</span><span class="p">(</span><span class="n">Message</span><span class="p">):</span>
201    <span class="sd">&quot;&quot;&quot;</span>
202<span class="sd">    Log module.function: log record</span>
203<span class="sd">    &quot;&quot;&quot;</span>
204    <span class="n">formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span><span class="s">&quot;Log </span><span class="si">%(module)s</span><span class="s">.</span><span class="si">%(funcName)s</span><span class="s">: </span><span class="si">%(message)s</span><span class="s">&quot;</span><span class="p">)</span>
205    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">record</span><span class="p">):</span>
206        <span class="bp">self</span><span class="o">.</span><span class="n">record</span> <span class="o">=</span> <span class="n">record</span>
207        <span class="sd">&quot;&quot;&quot;The partial result completed; this is job specific&quot;&quot;&quot;</span>
208    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
209        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">formatter</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">record</span><span class="p">)</span>
210
211<div class="viewcode-block" id="Monitor"><a class="viewcode-back" href="../../dev/api/park.html#park.monitor.Monitor">[docs]</a><span class="k">class</span> <span class="nc">Monitor</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
212    <span class="sd">&quot;&quot;&quot;</span>
213<span class="sd">    Messages that are received during the processing of the job.</span>
214
215<span class="sd">    Standard message types::</span>
216
217<span class="sd">        `Start`, `Progress`, `Improvement`, `Complete`, `Error`, `Abort`, `Log`</span>
218
219<span class="sd">    Specific job types may have their own monitor messages.</span>
220
221<span class="sd">    The messages themselves should all produce nicely formatted results</span>
222<span class="sd">    in response to str(message).</span>
223
224<span class="sd">    The message dispatch calls on&lt;Class&gt;(message) if the on&lt;Class&gt;</span>
225<span class="sd">    method exists for the message type.  If not, then dispatch</span>
226<span class="sd">    calls otherwise(message).  By default onLog(message) submits the</span>
227<span class="sd">    log record to the logger.</span>
228
229<span class="sd">    Subclass Monitor to define your own behaviours.</span>
230<span class="sd">    &quot;&quot;&quot;</span>
231<div class="viewcode-block" id="Monitor.put"><a class="viewcode-back" href="../../dev/api/park.html#park.monitor.Monitor.put">[docs]</a>    <span class="k">def</span> <span class="nf">put</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
232        <span class="sd">&quot;&quot;&quot;</span>
233<span class="sd">        Called from thread when new message has arrived.</span>
234<span class="sd">        &quot;&quot;&quot;</span>
235        <span class="n">fn</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> 
236                     <span class="s">&quot;onMonitor&quot;</span><span class="o">+</span><span class="n">message</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span> 
237                     <span class="bp">self</span><span class="o">.</span><span class="n">onMonitorMessage</span><span class="p">)</span>
238        <span class="n">fn</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
239</div>
240<div class="viewcode-block" id="Monitor.onMonitorMessage"><a class="viewcode-back" href="../../dev/api/park.html#park.monitor.Monitor.onMonitorMessage">[docs]</a>    <span class="k">def</span> <span class="nf">onMonitorMessage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
241        <span class="sd">&quot;&quot;&quot;</span>
242<span class="sd">        What to do if the message handler is not found.</span>
243
244<span class="sd">        Default is to ignore the message.</span>
245<span class="sd">        &quot;&quot;&quot;</span>
246        <span class="k">print</span> <span class="s">&quot;&gt;&quot;</span><span class="p">,</span><span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
247</div>
248<div class="viewcode-block" id="Monitor.onMonitorLog"><a class="viewcode-back" href="../../dev/api/park.html#park.monitor.Monitor.onMonitorLog">[docs]</a>    <span class="k">def</span> <span class="nf">onMonitorLog</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
249        <span class="sd">&quot;&quot;&quot;</span>
250<span class="sd">        Called when the job sends a logging record.</span>
251
252<span class="sd">        The logging record contains a normal python logging record.</span>
253
254<span class="sd">        The default behaviour is to tie into the application logging</span>
255<span class="sd">        system using::</span>
256
257<span class="sd">            logger = logging.getLogger(message.record.name)</span>
258<span class="sd">            logger.handle(message.record)</span>
259
260<span class="sd">        Logging levels are set in the job controller.</span>
261<span class="sd">        &quot;&quot;&quot;</span>
262        <span class="n">logging</span><span class="o">.</span><span class="n">basicConfig</span><span class="p">()</span>
263        <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">record</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
264        <span class="n">logger</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">record</span><span class="p">)</span>
265
266</div></div>
267<span class="k">def</span> <span class="nf">demo</span><span class="p">(</span><span class="n">rate</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
268    <span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">time</span><span class="o">,</span> <span class="nn">thread</span><span class="o">,</span> <span class="nn">logging</span>
269    <span class="kn">import</span> <span class="nn">park.monitor</span>
270
271    <span class="n">monitor</span> <span class="o">=</span> <span class="n">Monitor</span><span class="p">()</span>
272    <span class="k">def</span> <span class="nf">messagestream</span><span class="p">(</span><span class="n">monitor</span><span class="p">,</span><span class="n">rate</span><span class="p">,</span><span class="n">stream</span><span class="p">):</span>
273        <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">stream</span><span class="p">:</span>
274            <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">rate</span><span class="p">)</span>
275            <span class="n">monitor</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
276        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">rate</span><span class="p">)</span>
277    <span class="n">R</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">LogRecord</span><span class="p">(</span><span class="s">&#39;hi&#39;</span><span class="p">,</span><span class="mi">60</span><span class="p">,</span><span class="s">&#39;hello.py&#39;</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="s">&#39;log message&#39;</span><span class="p">,(),</span><span class="bp">None</span><span class="p">,</span><span class="s">&#39;here&#39;</span><span class="p">)</span>
278    <span class="k">try</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">&#39;Test exception&#39;</span><span class="p">)</span>
279    <span class="k">except</span><span class="p">:</span> <span class="n">trace</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">()</span>
280    <span class="n">stream</span><span class="o">=</span><span class="p">[</span><span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Start</span><span class="p">(),</span>
281            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Progress</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span>
282            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Progress</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span>
283            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Progress</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span>
284            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span><span class="s">&#39;Good&#39;</span><span class="p">),</span>
285            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Improvement</span><span class="p">(</span><span class="s">&#39;Better!&#39;</span><span class="p">),</span>
286            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Abort</span><span class="p">(</span><span class="s">&#39;Abandoned&#39;</span><span class="p">),</span>
287            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Start</span><span class="p">(),</span>
288            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Progress</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="s">&#39;seconds&#39;</span><span class="p">),</span>
289            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Improvement</span><span class="p">(</span><span class="s">&#39;Better!&#39;</span><span class="p">),</span>
290            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Progress</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span>
291            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Complete</span><span class="p">(</span><span class="s">&#39;Best!&#39;</span><span class="p">),</span>
292            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Start</span><span class="p">(),</span>
293            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Log</span><span class="p">(</span><span class="n">R</span><span class="p">),</span>
294            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Progress</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">10</span><span class="p">),</span>
295            <span class="n">park</span><span class="o">.</span><span class="n">monitor</span><span class="o">.</span><span class="n">Error</span><span class="p">(</span><span class="n">trace</span><span class="p">)]</span>
296    <span class="n">thread</span><span class="o">.</span><span class="n">start_new_thread</span><span class="p">(</span><span class="n">messagestream</span><span class="p">,</span> <span class="p">(</span><span class="n">monitor</span><span class="p">,</span><span class="n">rate</span><span class="p">,</span><span class="n">stream</span><span class="p">))</span>
297
298    <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">20</span><span class="o">*</span><span class="p">(</span><span class="n">rate</span><span class="o">+</span><span class="mf">0.01</span><span class="p">))</span>
299
300<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span> <span class="n">demo</span><span class="p">(</span><span class="n">rate</span><span class="o">=</span><span class="mf">0.1</span><span class="p">)</span>
301</pre></div>
302
303          </div>
304        </div>
305      </div>
306      <div class="sphinxsidebar">
307        <div class="sphinxsidebarwrapper">
308<div id="searchbox" style="display: none">
309  <h3>Quick search</h3>
310    <form class="search" action="../../search.html" method="get">
311      <input type="text" name="q" />
312      <input type="submit" value="Go" />
313      <input type="hidden" name="check_keywords" value="yes" />
314      <input type="hidden" name="area" value="default" />
315    </form>
316    <p class="searchtip" style="font-size: 90%">
317    Enter search terms or a module, class or function name.
318    </p>
319</div>
320<script type="text/javascript">$('#searchbox').show(0);</script>
321        </div>
322      </div>
323      <div class="clearer"></div>
324    </div>
325    <div class="related">
326      <h3>Navigation</h3>
327      <ul>
328        <li class="right" style="margin-right: 10px">
329          <a href="../../genindex.html" title="General Index"
330             >index</a></li>
331        <li class="right" >
332          <a href="../../py-modindex.html" title="Python Module Index"
333             >modules</a> |</li>
334        <li><a href="../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
335          <li><a href="../index.html" >Module code</a> &raquo;</li> 
336      </ul>
337    </div>
338    <div class="footer">
339        &copy; Copyright 2013, The SasView Project.
340      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
341    </div>
342  </body>
343</html>
Note: See TracBrowser for help on using the repository browser.