Skip to content

Commit aff9768

Browse files
deploy: a89d8ae
1 parent a6dbcec commit aff9768

25 files changed

Lines changed: 72 additions & 35 deletions

master/.buildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Sphinx build info version 1
22
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
3-
config: 6d242340667d35c9840f8600d0454ce3
3+
config: 6b0d3f5f4d27be7f1ebaf11140c6f9c1
44
tags: 645f666f9bcd5a90fca523b33c5a78b7
1.3 KB
Binary file not shown.
1.25 KB
Binary file not shown.

master/_modules/epicsdbbuilder/recordbase.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>epicsdbbuilder.recordbase &mdash; pythonSoftIOC 4.5.0+4.gd55483d documentation</title>
6+
<title>epicsdbbuilder.recordbase &mdash; pythonSoftIOC 4.5.0+9.ga89d8ae documentation</title>
77
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
88
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
99
<link rel="stylesheet" href="../../_static/theme_overrides.css" type="text/css" />

master/_modules/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>Overview: module code &mdash; pythonSoftIOC 4.5.0+4.gd55483d documentation</title>
6+
<title>Overview: module code &mdash; pythonSoftIOC 4.5.0+9.ga89d8ae documentation</title>
77
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
88
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
99
<link rel="stylesheet" href="../_static/theme_overrides.css" type="text/css" />

master/_modules/softioc/asyncio_dispatcher.html

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>softioc.asyncio_dispatcher &mdash; pythonSoftIOC 4.5.0+4.gd55483d documentation</title>
6+
<title>softioc.asyncio_dispatcher &mdash; pythonSoftIOC 4.5.0+9.ga89d8ae documentation</title>
77
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
88
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
99
<link rel="stylesheet" href="../../_static/theme_overrides.css" type="text/css" />
@@ -97,33 +97,62 @@ <h1>Source code for softioc.asyncio_dispatcher</h1><div class="highlight"><pre>
9797
<span class="kn">import</span> <span class="nn">atexit</span>
9898

9999
<div class="viewcode-block" id="AsyncioDispatcher"><a class="viewcode-back" href="../../reference/api.html#softioc.asyncio_dispatcher.AsyncioDispatcher">[docs]</a><span class="k">class</span> <span class="nc">AsyncioDispatcher</span><span class="p">:</span>
100-
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">loop</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
100+
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">loop</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">debug</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
101101
<span class="sd">&quot;&quot;&quot;A dispatcher for `asyncio` based IOCs, suitable to be passed to</span>
102102
<span class="sd"> `softioc.iocInit`. Means that `on_update` callback functions can be</span>
103103
<span class="sd"> async.</span>
104104

105105
<span class="sd"> If a ``loop`` is provided it must already be running. Otherwise a new</span>
106106
<span class="sd"> Event Loop will be created and run in a dedicated thread.</span>
107+
<span class="sd"> ``debug`` is passed through to ``asyncio.run()``.</span>
108+
109+
<span class="sd"> For a clean exit, call ``softioc.interactive_ioc(..., call_exit=False)``</span>
107110
<span class="sd"> &quot;&quot;&quot;</span>
108111
<span class="k">if</span> <span class="n">loop</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
112+
<span class="c1"># will wait until worker is executing the new loop</span>
113+
<span class="n">started</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Event</span><span class="p">()</span>
109114
<span class="c1"># Make one and run it in a background thread</span>
110-
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">new_event_loop</span><span class="p">()</span>
111-
<span class="n">worker</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">run_forever</span><span class="p">)</span>
115+
<span class="bp">self</span><span class="o">.</span><span class="n">__worker</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span>
116+
<span class="n">target</span><span class="o">=</span><span class="n">asyncio</span><span class="o">.</span><span class="n">run</span><span class="p">,</span>
117+
<span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__inloop</span><span class="p">(</span><span class="n">started</span><span class="p">),),</span>
118+
<span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;debug&#39;</span><span class="p">:</span> <span class="n">debug</span><span class="p">})</span>
112119
<span class="c1"># Explicitly manage worker thread as part of interpreter shutdown.</span>
113120
<span class="c1"># Otherwise threading module will deadlock trying to join()</span>
114121
<span class="c1"># before our atexit hook runs, while the loop is still running.</span>
115-
<span class="n">worker</span><span class="o">.</span><span class="n">daemon</span> <span class="o">=</span> <span class="kc">True</span>
122+
<span class="bp">self</span><span class="o">.</span><span class="n">__worker</span><span class="o">.</span><span class="n">daemon</span> <span class="o">=</span> <span class="kc">True</span>
123+
124+
<span class="bp">self</span><span class="o">.</span><span class="n">__worker</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
125+
<span class="n">started</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
126+
127+
<span class="bp">self</span><span class="o">.</span><span class="n">__atexit</span> <span class="o">=</span> <span class="n">atexit</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__shutdown</span><span class="p">)</span>
128+
129+
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">is_running</span><span class="p">()</span>
116130

117-
<span class="nd">@atexit</span><span class="o">.</span><span class="n">register</span>
118-
<span class="k">def</span> <span class="nf">aioJoin</span><span class="p">(</span><span class="n">worker</span><span class="o">=</span><span class="n">worker</span><span class="p">,</span> <span class="n">loop</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">):</span>
119-
<span class="n">loop</span><span class="o">.</span><span class="n">call_soon_threadsafe</span><span class="p">(</span><span class="n">loop</span><span class="o">.</span><span class="n">stop</span><span class="p">)</span>
120-
<span class="n">worker</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
121-
<span class="n">worker</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
122131
<span class="k">elif</span> <span class="ow">not</span> <span class="n">loop</span><span class="o">.</span><span class="n">is_running</span><span class="p">():</span>
123132
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Provided asyncio event loop is not running&quot;</span><span class="p">)</span>
124133
<span class="k">else</span><span class="p">:</span>
125134
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span> <span class="o">=</span> <span class="n">loop</span>
126135

136+
<span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
137+
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">__atexit</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
138+
<span class="n">atexit</span><span class="o">.</span><span class="n">unregister</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__atexit</span><span class="p">)</span>
139+
<span class="bp">self</span><span class="o">.</span><span class="n">__atexit</span> <span class="o">=</span> <span class="kc">None</span>
140+
141+
<span class="bp">self</span><span class="o">.</span><span class="n">__shutdown</span><span class="p">()</span>
142+
143+
<span class="k">async</span> <span class="k">def</span> <span class="nf">__inloop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">started</span><span class="p">):</span>
144+
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">get_running_loop</span><span class="p">()</span>
145+
<span class="bp">self</span><span class="o">.</span><span class="n">__interrupt</span> <span class="o">=</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">Event</span><span class="p">()</span>
146+
<span class="n">started</span><span class="o">.</span><span class="n">set</span><span class="p">()</span>
147+
<span class="k">del</span> <span class="n">started</span>
148+
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">__interrupt</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
149+
150+
<span class="k">def</span> <span class="nf">__shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
151+
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">__worker</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
152+
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">call_soon_threadsafe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__interrupt</span><span class="o">.</span><span class="n">set</span><span class="p">)</span>
153+
<span class="bp">self</span><span class="o">.</span><span class="n">__worker</span><span class="o">.</span><span class="n">join</span><span class="p">()</span>
154+
<span class="bp">self</span><span class="o">.</span><span class="n">__worker</span> <span class="o">=</span> <span class="kc">None</span>
155+
127156
<span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span>
128157
<span class="bp">self</span><span class="p">,</span>
129158
<span class="n">func</span><span class="p">,</span>
@@ -139,7 +168,13 @@ <h1>Source code for softioc.asyncio_dispatcher</h1><div class="highlight"><pre>
139168
<span class="n">completion</span><span class="p">(</span><span class="o">*</span><span class="n">completion_args</span><span class="p">)</span>
140169
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
141170
<span class="n">logging</span><span class="o">.</span><span class="n">exception</span><span class="p">(</span><span class="s2">&quot;Exception when running dispatched callback&quot;</span><span class="p">)</span>
142-
<span class="n">asyncio</span><span class="o">.</span><span class="n">run_coroutine_threadsafe</span><span class="p">(</span><span class="n">async_wrapper</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">)</span></div>
171+
<span class="n">asyncio</span><span class="o">.</span><span class="n">run_coroutine_threadsafe</span><span class="p">(</span><span class="n">async_wrapper</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">)</span>
172+
173+
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
174+
<span class="k">return</span> <span class="bp">self</span>
175+
176+
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">A</span><span class="p">,</span> <span class="n">B</span><span class="p">,</span> <span class="n">C</span><span class="p">):</span>
177+
<span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
143178
</pre></div>
144179

145180
</div>

master/_modules/softioc/builder.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>softioc.builder &mdash; pythonSoftIOC 4.5.0+4.gd55483d documentation</title>
6+
<title>softioc.builder &mdash; pythonSoftIOC 4.5.0+9.ga89d8ae documentation</title>
77
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
88
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
99
<link rel="stylesheet" href="../../_static/theme_overrides.css" type="text/css" />

master/_modules/softioc/device.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>softioc.device &mdash; pythonSoftIOC 4.5.0+4.gd55483d documentation</title>
6+
<title>softioc.device &mdash; pythonSoftIOC 4.5.0+9.ga89d8ae documentation</title>
77
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
88
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
99
<link rel="stylesheet" href="../../_static/theme_overrides.css" type="text/css" />

master/_modules/softioc/softioc.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>softioc.softioc &mdash; pythonSoftIOC 4.5.0+4.gd55483d documentation</title>
6+
<title>softioc.softioc &mdash; pythonSoftIOC 4.5.0+9.ga89d8ae documentation</title>
77
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
88
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
99
<link rel="stylesheet" href="../../_static/theme_overrides.css" type="text/css" />

master/_static/documentation_options.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var DOCUMENTATION_OPTIONS = {
22
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
3-
VERSION: '4.5.0+4.gd55483d',
3+
VERSION: '4.5.0+9.ga89d8ae',
44
LANGUAGE: 'None',
55
COLLAPSE_INDEX: false,
66
BUILDER: 'html',

0 commit comments

Comments
 (0)