Motor.run_to_position(blocking=False) starts new thread for each call.
Multiple calls with with in short time interval will result in multiple simultaneous calls to Device.get(), which blocks on Device._instance.portcond[self.port].wait()
BuildHAT.loop will wake threads in random order.
It will be better, if each new call cancels all outstanding requests