chiark / gitweb /
curveopt: parallelise findcurve processes
[moebius3.git] / curveopt.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]