chiark / gitweb /
curveopt: parallelise findcurve processes
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Apr 2018 13:05:48 +0000 (14:05 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Apr 2018 13:05:48 +0000 (14:05 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
curveopt.py
moebius.py

index 87438895f199d5a34d028f03a1294fe0bae51afe..e07e7250626349cd37838000d81881ba3ff90460 100644 (file)
@@ -64,6 +64,14 @@ class OptimisedCurve():
     print(s, file=subproc.stdin)
     subproc.stdin.flush()
 
+    oc.subproc = subproc
+    oc.nt = nt
+
+  def _await_subproc(oc):
+    subproc = oc.subproc
+    if subproc is None: return
+
+    dbg('(awaiting)')
     commentary = ''
 
     while True:
@@ -87,14 +95,15 @@ class OptimisedCurve():
     subproc.stdin.close()
     subproc.wait()
     assert(subproc.returncode == 0)
+    oc.subproc = None
 
-    oc.nt = nt
     oc._result = np.reshape(findcurve_result, (-1,3), 'C')
     dbg(repr(oc._result))
 
     vdbg().curve( oc.point_at_t )
 
   def point_at_it(oc, it):
+    oc._await_subproc()
     dbg(repr((it,)))
     return oc._result[it]
 
index fa182f26d4ee6c324a57ac527fda9a7e4356a15f..0c4330b67e0d8ea5bc7dceb089a0e113d7c976b2 100644 (file)
@@ -62,9 +62,12 @@ class MoebiusHalf:
     m._cp2b = BezierSegment([ (c,) for c in [0.33,0.33, 1.50]])
     m._dbeziers = [ m._dbezier(theta) for theta in m._thetas ]
     check = int(nu/3)-1
-    m._dbezier(m._thetas[check], OptimisedCurve)
-    m._dbezier(m._thetas[check+1], OptimisedCurve)
-    m._dbezier(m._thetas[check+2], OptimisedCurve)
+    checks = (
+      m._dbezier(m._thetas[check], OptimisedCurve),
+      m._dbezier(m._thetas[check+1], OptimisedCurve),
+      m._dbezier(m._thetas[check+2], OptimisedCurve),
+    )
+    for c in checks: c.point_at_it(0)
   def _dbezier(m, theta, dconstructor=DiscreteBezier):
     cp = [None] * 4
     cp[0] =               m.edge   .point(theta)