in backends/src/lib.rs [451:484]
fn new(
backend: Box<dyn CoreBackend + Send>,
mut backend_receiver: mpsc::Receiver<BackendCommand>,
health_sender: watch::Sender<bool>,
) -> Self {
let handle = std::thread::spawn(move || {
while let Some(cmd) = backend_receiver.blocking_recv() {
let start = Instant::now();
let mut healthy = false;
match cmd {
BackendCommand::Health(span, sender) => {
let _span = span.entered();
let _ = sender.send(backend.health().map(|_| healthy = true));
}
BackendCommand::Embed(batch, span, sender) => {
let _span = span.entered();
let _ = sender.send(backend.embed(batch).map(|e| {
healthy = true;
(e, start.elapsed())
}));
}
BackendCommand::Predict(batch, span, sender) => {
let _span = span.entered();
let _ = sender.send(backend.predict(batch).map(|e| {
healthy = true;
(e, start.elapsed())
}));
}
};
let _ = health_sender.send(healthy);
}
});
Self(Some(handle))
}