Skip to main content

BatchProcessor

Struct BatchProcessor 

Source
pub struct BatchProcessor<T: Send + 'static> { /* private fields */ }
Expand description

Batch processor for inference requests

Implementations§

Source§

impl<T: Send + 'static> BatchProcessor<T>

Source

pub fn new(config: BatchConfig) -> Self

Create a new batch processor

Source

pub async fn submit(&self, payload: T) -> Result<BatchResult<T>, BatchError>

Submit a request and wait for the result

Source

pub async fn run<F, Fut>(&self, executor: F)
where F: FnMut(Vec<T>) -> Fut, Fut: Future<Output = Vec<T>>,

Run the dynamic-batching serving loop: wait for a batch, collect it, run executor on the payloads, and deliver each request’s response.

This is the piece that makes BatchProcessor::submit resolve — without a running run (or manual collect_batch/complete_batch), submitted futures never complete. It is the serving primitive an inference/expert worker spawns as a task; it loops until the task is cancelled.

executor receives the batched payloads in arrival order and must return exactly one response per input, in the same order. (If it returns fewer, the surplus requests are cancelled rather than answered.)

let p = processor.clone();
tokio::spawn(async move {
    p.run(|batch: Vec<Req>| async move { model.forward(batch).await }).await;
});
let result = processor.submit(req).await?; // resolved by the loop
Source

pub fn queue_len(&self) -> usize

Get current queue length

Source

pub fn stats(&self) -> BatchStats

Get batch statistics

Source

pub fn collect_batch(&self) -> Vec<(T, Sender<BatchResult<T>>, Instant)>

Collect a batch of requests (up to max_batch_size)

Source

pub fn complete_batch(&self, results: Vec<(Sender<BatchResult<T>>, Instant, T)>)

Complete a batch with results.

Each entry is (response_sender, arrival_instant, response_payload).

Source

pub async fn wait_for_batch(&self) -> bool

Wait for a batch to be ready

Trait Implementations§

Source§

impl<T: Send + 'static> Clone for BatchProcessor<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for BatchProcessor<T>

§

impl<T> !UnwindSafe for BatchProcessor<T>

§

impl<T> Freeze for BatchProcessor<T>

§

impl<T> Send for BatchProcessor<T>

§

impl<T> Sync for BatchProcessor<T>

§

impl<T> Unpin for BatchProcessor<T>

§

impl<T> UnsafeUnpin for BatchProcessor<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more