Planner: lazy-load camotics.gplan so HTTP listener comes up first
Importing camotics.gplan pulls in a C++ extension (libstdc++, boost::python, etc.) which adds several seconds to bbctrl startup on the Pi. Defer it to Planner.init() — bbctrl can serve the UI and accept connections without ever touching the planner, and the penalty is paid only the first time motion is queued.
This commit is contained in:
@@ -30,7 +30,22 @@ import math
|
|||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
from collections import deque
|
from collections import deque
|
||||||
import camotics.gplan as gplan # pylint: disable=no-name-in-module,import-error
|
# camotics.gplan is heavy (loads a C++ extension that pulls in libstdc++,
|
||||||
|
# boost::python, etc.). Defer it: bbctrl can listen on HTTP and serve
|
||||||
|
# the UI without ever touching the planner. Lazy-load the first time
|
||||||
|
# Planner.init() runs, which is when the user actually queues motion.
|
||||||
|
gplan = None
|
||||||
|
def _load_gplan():
|
||||||
|
global gplan
|
||||||
|
if gplan is None:
|
||||||
|
try:
|
||||||
|
import bbctrl.Trace as _T
|
||||||
|
with _T.span('imports.camotics_gplan'):
|
||||||
|
import camotics.gplan as _gplan # pylint: disable=no-name-in-module,import-error
|
||||||
|
except Exception:
|
||||||
|
import camotics.gplan as _gplan # pylint: disable=no-name-in-module,import-error
|
||||||
|
gplan = _gplan
|
||||||
|
return gplan
|
||||||
import bbctrl.Cmd as Cmd
|
import bbctrl.Cmd as Cmd
|
||||||
from bbctrl.CommandQueue import CommandQueue
|
from bbctrl.CommandQueue import CommandQueue
|
||||||
|
|
||||||
@@ -329,7 +344,7 @@ class Planner():
|
|||||||
if stop:
|
if stop:
|
||||||
self.ctrl.mach.stop()
|
self.ctrl.mach.stop()
|
||||||
|
|
||||||
self.planner = gplan.Planner()
|
self.planner = _load_gplan().Planner()
|
||||||
self.planner.set_resolver(self._get_var_cb)
|
self.planner.set_resolver(self._get_var_cb)
|
||||||
# TODO logger is global and will not work correctly in demo mode
|
# TODO logger is global and will not work correctly in demo mode
|
||||||
self.planner.set_logger(self._log_cb, 1, 'LinePlanner:3')
|
self.planner.set_logger(self._log_cb, 1, 'LinePlanner:3')
|
||||||
|
|||||||
Reference in New Issue
Block a user