diff options
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 |