diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2018-10-15 18:52:28 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2018-10-15 19:01:19 -0400 |
commit | 368703fd78ae7256d8989acdc164b524e27cd320 (patch) | |
tree | 76cf2f589744a85d0c1dc6ed2fad1b55e7f1348c /klippy/mathutil.py | |
parent | 46355f903eb8d13448633045346051bc68c1279b (diff) | |
download | kutter-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.py | 29 |
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 |