aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/mathutil.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-10-15 18:52:28 -0400
committerKevin O'Connor <kevin@koconnor.net>2018-10-15 19:01:19 -0400
commit368703fd78ae7256d8989acdc164b524e27cd320 (patch)
tree76cf2f589744a85d0c1dc6ed2fad1b55e7f1348c /klippy/mathutil.py
parent46355f903eb8d13448633045346051bc68c1279b (diff)
downloadkutter-368703fd78ae7256d8989acdc164b524e27cd320.tar.gz
kutter-368703fd78ae7256d8989acdc164b524e27cd320.tar.xz
kutter-368703fd78ae7256d8989acdc164b524e27cd320.zip
delta_calibrate: Perform coordinate descent in a background process
Run the coordinate descent in a background process so that the main thread does not block. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/mathutil.py')
-rw-r--r--klippy/mathutil.py29
1 files changed, 28 insertions, 1 deletions
diff --git a/klippy/mathutil.py b/klippy/mathutil.py
index 0801eba5..81a949ad 100644
--- a/klippy/mathutil.py
+++ b/klippy/mathutil.py
@@ -3,7 +3,7 @@
# Copyright (C) 2018 Kevin O'Connor <kevin@koconnor.net>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
-import math, logging
+import math, logging, multiprocessing
######################################################################
@@ -45,6 +45,33 @@ def coordinate_descent(adj_params, params, error_func):
logging.info("Coordinate descent best_err: %s rounds: %d", best_err, rounds)
return params
+# Helper to run the coordinate descent function in a background
+# process so that it does not block the main thread.
+def background_coordinate_descent(printer, adj_params, params, error_func):
+ parent_conn, child_conn = multiprocessing.Pipe()
+ def wrapper():
+ res = coordinate_descent(adj_params, params, error_func)
+ child_conn.send(res)
+ child_conn.close()
+ # Start a process to perform the calculation
+ calc_proc = multiprocessing.Process(target=wrapper)
+ calc_proc.daemon = True
+ calc_proc.start()
+ # Wait for the process to finish
+ reactor = printer.get_reactor()
+ gcode = printer.lookup_object("gcode")
+ eventtime = last_report_time = reactor.monotonic()
+ while calc_proc.is_alive():
+ if eventtime > last_report_time + 5.:
+ last_report_time = eventtime
+ gcode.respond_info("Working on calibration...")
+ eventtime = reactor.pause(eventtime + .1)
+ # Return results
+ res = parent_conn.recv()
+ calc_proc.join()
+ parent_conn.close()
+ return res
+
######################################################################
# Trilateration